Fermeture fichier - C#/.NET managed - Programmation
Marsh Posté le 21-04-2006 à 10:58:30
saikal a écrit : salut à tous, |
si tu fermes ton appli, le fichier est accessible ?
Marsh Posté le 21-04-2006 à 11:58:42
Oui
C'est que quand mon appli est ouverte que je ne peu pas atteindre le fichier
Marsh Posté le 21-04-2006 à 12:20:37
stream.Dispose();
stream = null;
(je ferais pareil avec Socket, à mon avis ton port est toujours occupé après un Close())
Toujours bien détruire les handles vers les ressources !
Le close n'est pas suffisant. Le stream ne lit plus le fichier, mais il peut être réouvert, et donc il conserve le lock.
Tu peux aussi ouvrir le fichier en indiquant un niveau de lock permettant la lecture ou l'écriture en // dans le fichier. Ainsi, tu as toujours ton handle dessus, mais tu peux toujours y accéder...
Marsh Posté le 25-04-2006 à 11:26:29
Merci ca marche maintenant juste avec un stream.close et une fermeture de socket.
Marsh Posté le 25-04-2006 à 11:54:08
et donc, t'as changé quoi ? parceque c'est ce que tu faisais déjà...
Marsh Posté le 27-04-2006 à 16:14:36
non mais en fait j'avais fait une erreur de débutante j'ai envie de dire... je passais dans une condition et en fait au résultat je ne faisait jamais la ligne de fermeture mais dès que je 'ai enlevé ca a été impec.
Mais je pense qu'au niveau des sockets tu as raison il faudrait que je ferme et que je détruise tout en fin d'application sinon c'est pas vraiment propre...
Marsh Posté le 27-04-2006 à 16:51:21
idem pour les fichiers (en fait, pour tous les objets qui appellent des ressources externes au programme). le dispose est important, car il indique immédiatement au GC qu'il peut recycler les objets inutilisés. sans ça, ça bouffe de la mémoire pour rien, car le GC va recycler quand il aura le temps, y compris quand ton application sera fermée. et en résultat, tu risques d'avoir des locks sur des ressources, et ne pas comprendre pkoi tu peux plus y accéder, ou simplement pourquoi ton appli plante au démarrage une fois sur deux
Marsh Posté le 21-04-2006 à 10:46:21
salut à tous,
JE suis en VB.NET et je fais des transferts de fichier par le biais de sockets.Donc dans la partie ou j'envoie je fais :
Ouverture/Lecture
Dim bye As Boolean = False
'Lecture du ficher dans un tableau de Bytes
stream = File.Open(chemin, FileMode.Open)
Dim longueur As Integer
'convertion du long stream.length en entier
longueur = CType(stream.Length, Integer)
Dim data(longueur) As Byte
'stream.Read(data, 0, data.Length)
'transfert en Byte()
'stream.Close()
'La fonction Read permet une lecture du fichier
stream.Read(data, 0, data.Length)
Quand le fichier est lu et transféré:
FileClose()
stream.Close()
SocketFic.close()
Ce que je ne comprends pas c'est que si je veux acceder au fichier sans fermer mon application il me met que le fichier n'est pas disponible car deja en cours d'utilisation.Je dois donc mal m'y prendre pour fermer le fichier...
J'espere avoir été claire...
Message édité par saikal le 21-04-2006 à 10:48:00