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 Forms Discussion :

[C# 2.0] Ouvrir un fichier et interdir qu'on le modifie avant qu'il soit fermé


Sujet :

Windows Forms

  1. #1
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut [C# 2.0] Ouvrir un fichier et interdir qu'on le modifie avant qu'il soit fermé
    Hello,

    J'ai une serie de fichiers texte dans un repertoire partagé. Ces fichiers sont lus par mon appli. Je voudrais que lorsqu'un fichier est ouvert par un utilisateur, les autres utilisateurs ne puissent pas ecrir dans ce fichier tant que l'utilsateur qui l'a ouvert en premier ne l'a pas fermé.

    Comment est-ce que je peux faire ça??
    moi j'ai pensé à jouer avec l attribut "ReadOnly" du fichier.. mais je ne sais pas s'il existe d'autres possibilités


    Merci
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut bossun,

    dans la methode open de la classe File

    tu peux specifier le type d'accees que ont les autre sthreads qui essaient de manipuler le fichier.

    Essaie cette solution.
    A+
    Mehdi Feki : Modérateur .Net

  3. #3
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    yeah super.. j'étais justement en train de lire ce document :-)


    une autre question:

    Est-il possible de savoir au moment de l'ouverture du fichier s'il est déjà ouvert par qqn d'autre??
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    normalement si le fichier est deja ouvert, et que quelqu'un d'autre veut l'ouvrir, tu devrais avoir une exception, non .

    Enfin à part ca je n'ai pas d'autre idée à proposer et je ne pense pas qu'il existe un moyen de le savoir.
    Mehdi Feki : Modérateur .Net

  5. #5
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Yep, super...

    je devrais m'en sortir avec ça...

    merci bcp
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  6. #6
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    j'ai encore une question..

    j'ai effectivement une exception si qqn a déjà ouvert le fichier en lecture/ecriture.

    mais par contre je ne sais pas comment faire pour ouvrir le fichier en lecture seule...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
                try
                {
     
     
                    _LayoutStream = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
                    _ReportParameters = (LayoutSerialization)BF.Deserialize(_LayoutStream);
     
     
                }
                catch (IOException ex)
                {
                    _LayoutStream = File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
                    _ReportParameters = (LayoutSerialization)BF.Deserialize(_LayoutStream);
     
                    MessageBox.Show("Ce rapport est en lecture seule car il est déjà ouvert par un autre utilisateur");
                }
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  7. #7
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    il faut que je teste bossun, mais si tu m'expliquais un peu mieux ce que tu veux faire par un petit scenario.

    deux threads vont ouvrir le fichier par exemple.
    Mehdi Feki : Modérateur .Net

  8. #8
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Mon but est simple..

    Je prends un exemple d'un document Word...

    Dans un dossier partagé tu as 1 document word. L'utilisateur 1 ouvre ce document word. il a donc un accès en lecture /ecriture dessus..

    Vient ensuite son collègue qui ouvre le meme document word. L'utilisateur 1 n'a toujours pas fermé son document. donc le collègue de l'utilisateur 1 va ouvrir le document en lecture seule --> ce qui est logique... et il ne pourra pas sauver les modifier...

    Est-ce plus clair maintenant???

    j'arrive bien à ouvrir mon document en lecture/ecriture.. mais si mon document est déjà ouvert. ben je n'arrive pas à l'ouvrir en lecture seul...


    bon j'ai tenté une autre alternative qui semble fonctionner.. mais elle est pas très elegante...

    je copie le document ailleurs et je l'ouvre depuis là et j interdit tout enregistrement...
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  9. #9
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    ok je comprends, je m'y mes avec toi, parce que j'ai jamais essayé, je savais juste que Open permettait ca.

    A+
    Mehdi Feki : Modérateur .Net

  10. #10
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ah ben super.. t es cool..
    j'y ai passé la journée de hier et ce matin à resoudre ce problem sans réussir.. mais bon je garde ma solution temporairement....
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  11. #11
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Bon voila ou j'en ai. Dans ce code j'ouvre le fichier 2 fois. Le premier en ReadWrite le deuxieme en Read, si c'etait en write tu auras une exception, c'est ce que tu veux non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileStream fs = File.Open(@"C:\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
    FileStream fs2 = File.Open(@"C:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    je t'explique la partie en gras. Puisque il existe deja un FileStream qui a ouvert le fichie en ReadWrite, donc forcement fs2 doit partager en ReadWrite sinon tu auras une exception.

    Voila. Si tu as d'autres questions n'hesite pas.

    ++
    Mehdi Feki : Modérateur .Net

  12. #12
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    C'est si con que ça??

    eh ben m... j'ai pourtant tout essayé... ça a du m'echaper


    en tout cas merci je viens de tester et ça semble marcher...


    Thank's :-)
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  13. #13
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par bossun
    C'est si con que ça??
    Non , J'ai passé une heure à comprendre l'histoire, disons c'est mal documenté
    Mehdi Feki : Modérateur .Net

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut custom
    Actuellement je n’ai pas VS pour faire les tests mais je te propose une approche indépendamment de ce que propose la framework :
    L idée est d’encapsuler le ficher dans un classe « MyCustomFile » qui aura comme propriété : File et Status : Boolean (Openned : True / Closed : flase)

    Il faudra aussi implémenter une classe MyCustomeFileManager qui va gérer l ouverture et la fermeture du fichier, Si le doc est déjà ouvert (Status à True) on va proposer à l’utilisateur de travailler sur une copie du fichier ou d’ouvrir le fichier plus tard !
    « le fichier xxx.doc est ouvert voulez vous travailler sur copie »
    S’il décide de l’ouvrir , MyCustomeFileManager créera une copie du fichier et notifiera l’utilisateur !
    Apres les modifs de la copie on peut toujours demander à l’utilisateur s’il veut écraser la copie original (ca depend ce que tu veux faire ) !

  15. #15
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Ta solution Roshdy me semble un peu compliquée...

    la solution que mehdy m'a proposé est la meilleure et la plus simple à mettre en oeuvre...

    4 lignes de code seulement..
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2004, 13h55
  2. ouvrir un fichier
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 10/01/2004, 23h04
  3. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

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