Fermeture fichier

Fermeture fichier - C#/.NET managed - Programmation

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... :sweat:

Message cité 1 fois
Message édité par saikal le 21-04-2006 à 10:48:00
Reply

Marsh Posté le 21-04-2006 à 10:46:21   

Reply

Marsh Posté le 21-04-2006 à 10:58:30    

saikal a écrit :

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... :sweat:


 
si tu fermes ton appli, le fichier est accessible ?

Reply

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

Reply

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...


Message édité par Arjuna le 21-04-2006 à 12:21:16
Reply

Marsh Posté le 25-04-2006 à 11:26:29    

Merci ca marche maintenant juste avec un stream.close et une fermeture de socket.

Reply

Marsh Posté le 25-04-2006 à 11:54:08    

et donc, t'as changé quoi ? parceque c'est ce que tu faisais déjà...

Reply

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...

Reply

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 ;)


Message édité par Arjuna le 27-04-2006 à 16:51:41
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed