littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009
-
20 mars 2006 à 08:39
littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009
-
31 mars 2006 à 08:03
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.
A voir également:
[VB.NET] Comment être sûr qu'un fichier est écrit avant sa lecture par un autre
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 20 mars 2006 à 08:40
Bonjour
Tu peux utiliser la méthode Flush, il me semble.
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009 20 mars 2006 à 10:26
Le prototype d'une procédure ou d'une fonction d'écriture d'un fichier texte est la suivante :
Dim OutputFile
As
New System.IO.FileStream("c:\mon_fichier.txt", FileMode.OpenOrCreate, FileAccess.Write)
Dim OutputLine
As
New StreamWriter(OutputFile)
...
le reste du prog
...
OutputLine.Flush()
OutputLine.Close()
Le flush et le close se placent en fin de programme et servent à libérer les ressources mais cela n'empêche pas à une application extérieure de lire le fichier.
Je suis en train d'essayer avec ça :
Dim OutputFile
As
New System.IO.FileStream(path1, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)
avec fileshare sur none, le fichier ne devrait pas être partagé.
Le seul problème est de savoir comment faire pour que vb.net attende que ce fichier est bien complètement écrit avant de redonner la main à mon autre programme ?
troxsa
Messages postés553Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention 2 octobre 20161 20 mars 2006 à 10:49
voila un petit exemple de ma penser :)
Dim Ecrire As New StreamWriter("c:\MonFicher2005.txt")
Dim compteur As Integer = 0
Ecrire.WriteLine("Ligne1")
Try
Dim Lecture As New StreamReader("c:\MonFicher2005.txt")
Catch ex As IOException
Do While ex.Message <> ""
compteur += 1
If compteur > 50000 Then
Console.WriteLine("Fichier toujours utilisé")
Exit Do
End If
Loop
End Try
littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009 20 mars 2006 à 11:38
Désolé mais je ne peux pas mettre de conditions sur le fichier lorsqu'il est lu.
Je sais qu'il y a moyen de locker un fichier avec le system.IO.fileshare ou le system.security.permissions.fileIOpermissions, le gros problème est de savoir quand est-ce que ce fichier est complètement écrit par windows (il y a toujours un décalage entre la commande et l'écriture vu que c'est asynchrone) ?
Ce qui serait bien, ce serait de passer en écrituresynchrone (ce qui devrait être plus lent) mais je ne vois pas vraiment comment faire...
littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009 26 mars 2006 à 18:47
J'ai utilisé ceci :
Dim newfile As New System.IO.FileStream(AdjustedFile, FileMode.Create, FileAccess.Write, FileShare.None, 0, False)
Dim outline As New StreamWriter(newfile)
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 ?
littlekenny
Messages postés43Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention10 septembre 2009 27 mars 2006 à 14:59
J'ai testé les fileSystemWatcher, comme cela est décrit dans l'aide msdn. Ca voit quand je modifie ou crée un fichier, entre autre, mais seulement quand je le fais à la main. 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.