IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[c++ ]blocage de fichier


Sujet :

Windows

  1. #1
    srs
    srs est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [c++ ]blocage de fichier
    bonjour a tous !

    je bloque sur un probleme et je viens chercher un peu d'aide

    ce que je cherche a faire :

    je possede un fichier (un .ini) qui contient des informations que chaques connexions au logiciel vient lire puis modifier. Mon probleme vient du fait qu'il est possible qu'a un moment 2 personnes recuperent la meme information. Cela ne doit pas se produire et a part bloquer le fichier et faire poiroter les utilisateurs suivants, je ne vois pas de solutions plus efficace .

    en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TANT QUE le fichier est ouvert par kelkun
       ... poirote
    FIN
    
    /* ici il est passé car il a pu ouvrir le fichier */
    ouvre le fichier
    bloque le fichier
    recupere l'info
    modifie une info
    libere le fichier
    voila en gros ce que je n'arrive pas a faire. Lire les infos dans le fichier .ini et les modifier : c'est bon !!! mais mettre en place un systeme pour faire poiriter une connexion jusqu'à qu'elle prenne la main sur le fichier, je n'y arrive pas

    note : le traitement qui est effectué entre la lecture du fichier et la modification des infos est extremement rapide ce qui ne fait pas poiroter les connexions pdt de longues minutes mais l'installation d'un tel blocage est nécessaire pour eviter d'eventuels problèmes .

    merci a tous et toutes pour l'aide que vous pourrez me fournir.

    les fonctions de lecture et modification du fichier .ini sont :

    GetPrivateProfileString() ;
    WritePrivateProfileString() ;

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Tu peux créer un fichier temporaire qui sert à savoir si quelqu'un utilise ou non ton fichier ini.

    Tantque FichierLockExiste
    debut
    Attendre
    fin
    Créer fichier Lock
    ecrire dans mon fichier
    Détruire fichier Lock

    Si c'est le meme programme qui gere tes fichiers ini, tu peux utiliser une variable static

    static bool INI_UTILISE;
    J'aime pas les épinards... Mais alors pas du tout

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Eh bien, pour bloquer le fichier tu peux directement l'ouvrir avec CreateFile() (valeur OPEN_EXISTING) et avec aucun flag (valeur 0) pour le paramètre dwShareMode.

    Seulement, si un autre programme tente d'ouvrir le fichier, l'accès lui sera simplement refusé: CreateFile() retournera INVALID_HANDLE_VALUE sans attendre. Enfin, après, tu toujours tenter en boucle d'ouvrir, mais ça peut être considéré comme sale...

    Pour éviter d'attendre en boucle, tu peux aussi créer un Mutex nommé avec CreateMutex(), chaque programme tentant d'ouvrir le fichier devant récupérer le mutex avant...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 681
    Points
    10 681
    Billets dans le blog
    3
    Par défaut
    C'est de la programmation Windows, je déplace.
    Tu peux locker le fichier avec CreateFile->LockFile.
    Il n'y a que ton process qui accède à ce fichier, où y'a d'autres process / programmes que le tient ?

  5. #5
    srs
    srs est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    en gros, c'est le meme programme qui accede au fichier mais lancé par différents utilisateurs puisque le fichier .ini en question est sur un serveur !

    je pense que je vais utiliser le principe du fichier temporaire, comme word par ex.

    le probleme est que mes connaissances en c++ sont vraiment tres faible et pour le moment tout ce que j'ai reussi a faire vient de reponses données sur des forums.

    au niveau de la procédure je vois bien ce que doit faire le programme mais je ne sais pas comment faire pour savoir si le fichier existe ou pas !

  6. #6
    srs
    srs est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    j'ai trouvé la solution, merci a tous pour votre aide

    j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    hFile = CreateFile("c:\\monfichier.temp",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL) ;
    while (hFile == INVALID_HANDLE_VALUE)
    {
              hFile = CreateFile("c:\\monfichier.temp",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL) ;
    }
    CloseHandle(hFile) ;
    c'est moche mais ca marche tres bien

    encore merci

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu pourrais peut-être utilise des évènements, là tu bouffes du temps processeur il me semble.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Mais dans ce cas, il serait plus simple d'utiliser LockFileEx()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    srs
    srs est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    comme je suis tres peu calé en c ou c++ et ayant trouvé une soluce qui m'a débloqué de mon probleme, grace a vos conseil. je pense que je vais laisser comme ca ! J'ai encore plein de truc a faire sur ce projet et je peux plus me permettre de perdre de tps sur ce point la.

    encore merci a tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD11] Problème de blocage de fichier
    Par slick42 dans le forum WinDev
    Réponses: 18
    Dernier message: 18/02/2019, 14h17
  2. [XL-2010] Blocage de fichier depuis COM.
    Par a028762 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2012, 15h04
  3. Blocage de fichiers.
    Par philnext dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2010, 21h47
  4. Probleme de blocage de fichier .htaccess
    Par _ChToM_ dans le forum Apache
    Réponses: 4
    Dernier message: 01/10/2008, 10h07
  5. Blocage de fichier/enregistrement
    Par chapeau_melon dans le forum WinDev
    Réponses: 1
    Dernier message: 15/02/2008, 00h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo