Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
747 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Fermeture fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fermeture fichier

n°1351023
saikal
Posté le 21-04-2006 à 10:46:21  profilanswer
 

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
mood
Publicité
Posté le 21-04-2006 à 10:46:21  profilanswer
 

n°1351038
alien_nan
Posté le 21-04-2006 à 10:58:30  profilanswer
 

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 ?

n°1351098
saikal
Posté le 21-04-2006 à 11:58:42  profilanswer
 

Oui  
C'est que quand mon appli est ouverte que je ne peu pas atteindre le fichier

n°1351117
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-04-2006 à 12:20:37  profilanswer
 

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
n°1353400
saikal
Posté le 25-04-2006 à 11:26:29  profilanswer
 

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

n°1353436
Arjuna
Aircraft Ident.: F-MBSD
Posté le 25-04-2006 à 11:54:08  profilanswer
 

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

n°1355276
saikal
Posté le 27-04-2006 à 16:14:36  profilanswer
 

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

n°1355330
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-04-2006 à 16:51:21  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Fermeture fichier

 

Sujets relatifs
Ajouter une ligne en tête et fin de fichierlire un fichier excel à l'aide de perl
Lecture de fichier de configurationAjout de caractère en tête de ligne d'un fichier
Afficher un fichier puis forcer son downloadTraitement d'un fichier dans BDD Mysql
trouver le path d'un fichier excelImportation fichier .sql
Macro a executer a la fermeture du fichierautomatiser la fermeture d'une application après transfert de fichier
Plus de sujets relatifs à : Fermeture fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR