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

VB.NET Discussion :

[VBNET]Comment être sûr que fichier est écrit avant lecture?


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut [VBNET]Comment être sûr que fichier est écrit avant lecture?
    Comment puis-je coder mon application vb.net afin qu'elle attende à un certain point de son exécution, que tous les fichiers textes qu'elle écrit, soient complètement écrits sur le disque avant de continuer. Ces fichiers textes servent d'espaces d'échange de données entre mon application et une autre dont je n'ai pas accès au code source.

    Le problème est que l'écriture de fichiers sur le disque est quelque chose d'asynchrone, j'avais penser aux fonctions synchronize et lock des streamwriters, mais sans succès (ou alors je les ai mal utilisées).

    Si vous avez déjà été confronté à ce problème ou que vous avez la moindre idée, je vous en serai très reconnaissant. Merci d'avance.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    La gestion des exceptions peut être une piste, en modifiant le paramètre FileShared du flux sur le fichier. Ainsi ce flux en lecture ne sera possible que si l'accès du flux en ecriture est bien libéré.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci, je vais d'abord essayer ça avec try...catch avant que mon application vb.net ne redonne la main à la seconde application.

    Je posterai un exemple si cela fonctionne.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    J'ai utilisé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim newfile As New System.IO.FileStream(AdjustedFile, FileMode.Create, FileAccess.Write, FileShare.None, 0, False)
    Dim outline As New StreamWriter(newfile)
    ...
    le reste du prog
    ...
    outline.Flush()
    outline.Close()
    A prioris, ça fonctionne mais puis-je affirmer à 100% à 100% que l'écriture est à synchrone et que toute information est bien écrite sur le disque avant mon programme vb.net redonne la main à mon second programme ?

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Difficile de te répondre car je ne vois pas où se trouve la gestion d'exception

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par Garrett
    A prioris, ça fonctionne mais puis-je affirmer à 100% que l'écriture est à synchrone et que toute information est bien écrite sur le disque avant mon programme vb.net redonne la main à mon second programme ?
    D'après la doc, l'écriture de tout le buffer est faite à ton appel à Flush (ou Close s'il n'y avait pas Flush avant, qui devrait donc être facultatif dans ce cas).
    Donc, toujours d'après la doc, oui, après Flush/Close le fichier est écrit.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci, je vais voir ça.

  8. #8
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 53
    Points : 61
    Points
    61
    Par défaut y'a ca aussi
    j'ai trouvé ca dans les FAQ, l'auteur est ABELMAN, cela monitor l'etat d'un repertoire ou d'un fichier selon l'action qui lui est executée... et selon cette meme action tu declenches ou non ton code.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Imports System.IO 
     
    Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String = "*") 
    'On peut utiliser les '*' avec sFilter  Dim fw As New FileSystemWatcher(sPath, sFilter) 
    'On ajoute les handler pour surveiller les évènements qu'on souhaite.  
    AddHandler fw.Changed, AddressOf OnChanged
    AddHandler fw.Renamed, AddressOf OnRenamed
    AddHandler fw.Created, AddressOf OnChanged
    AddHandler fw.Deleted, AddressOf OnChanged
    AddHandler fw.Error, AddressOf OnError
    'On surveillera aussi les sous répertoires  
    fw.IncludeSubdirectories = True  
    ' Mettre cette propriété à True démarre la surveillance des modifications. La mettre à false l'arrête.  
    Dans notre exemple, elle sera à true durant tout le programme fw.EnableRaisingEvents = True  
    End Sub  
     
    Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs) 
    Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType) 
    End Sub  
     
    Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
     Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath) 
    End Sub
     
    Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs) Dim ex As Exception = e.GetException()  
    Debug.WriteLine(ex.ToString()) Console.WriteLine(ex.Message) 
    End Sub

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci mais j'avais déjà essayé les FileSystemWatcher avec une adaptation de l'exemple de l'aide msdn. En fait, cela contrôle tout ce que l'utilisateur fait mais pas ce qu'un logiciel exécute. Si un programme crée, modifie ou supprime un fichier, ça ne se voit pas, ou pas comme un événement recevable par un FileSystemWatcher.
    Sinon l'idée était bonne.

    J'utilise la propriété autoflush des streamwriters combinée avec une écriture synchrone et pour l'instant ça marche. Je vais faire encore quelques tests avant de confirmer.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2012, 21h25
  2. [Toutes versions] Comment être sur que c'est bien un mail qui est sélectionné
    Par basto dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 02/01/2012, 15h41
  3. Comment savoir si un fichier est fini d'être uploadé ?
    Par rhesus dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 29/11/2011, 20h05
  4. Réponses: 11
    Dernier message: 11/01/2008, 19h13
  5. Comment être sure que mon appli prenne le focus ?
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/12/2002, 15h00

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