OVH Cloud OVH Cloud

Vider un fichier texte

10 réponses
Avatar
F. F.
Bonjour,
je suis novice en manipulation de fichier, et je n'ai pas trouvé de méthode
qui vide un fichier texte.
De plus, est-il possible de modifier une ligne d'un fichier (quitte à la
réécrire entièrement, mais à la même place) ?

Merci

10 réponses

Avatar
frédo
pour vider le fichier, je pense qu'il faut le recréer

pour modifier une ligne dans un fichier texte il faut
lire le fichier ligne par ligne jusqu'à arriver à la
ligne à modifier et bien sûr le recréer. En tout cas avec
les moyens standards de C#.



-----Original Message-----
Bonjour,
je suis novice en manipulation de fichier, et je n'ai


pas trouvé de méthode
qui vide un fichier texte.
De plus, est-il possible de modifier une ligne d'un


fichier (quitte à la
réécrire entièrement, mais à la même place) ?

Merci
.



Avatar
Jean-marc Sennechael
Bonjour,

La classe System.IO.File fournit toutes les méthodes utiles pour réaliser ce
traitement.

Cordialement,


Jean-Marc Sennechael
Microsoft France - MCS

Ce message est fourni en l'état, sans garantie d'aucune sorte et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.


"frédo" wrote in message
news:18c201c4dbb5$b8914c30$
pour vider le fichier, je pense qu'il faut le recréer

pour modifier une ligne dans un fichier texte il faut
lire le fichier ligne par ligne jusqu'à arriver à la
ligne à modifier et bien sûr le recréer. En tout cas avec
les moyens standards de C#.



-----Original Message-----
Bonjour,
je suis novice en manipulation de fichier, et je n'ai


pas trouvé de méthode
qui vide un fichier texte.
De plus, est-il possible de modifier une ligne d'un


fichier (quitte à la
réécrire entièrement, mais à la même place) ?

Merci
.



Avatar
F. F.
Fredo, j'avais effectivement pensé à recréer le fichier, mais je trouve
incroyable qu'on soit obligé de passer par là pour cette opération.

Jean-Marc, de quel traitement parles-tu ? De recréer le fichier ou de le
vider ? Si c'est de le vider, peux-tu me donner la méthode adéquate car je ne
la trouve vraiment pas.

D'avance merci

"Jean-marc Sennechael" wrote:

Bonjour,

La classe System.IO.File fournit toutes les méthodes utiles pour réaliser ce
traitement.

Cordialement,


Jean-Marc Sennechael
Microsoft France - MCS

Ce message est fourni en l'état, sans garantie d'aucune sorte et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.


"frédo" wrote in message
news:18c201c4dbb5$b8914c30$
pour vider le fichier, je pense qu'il faut le recréer

pour modifier une ligne dans un fichier texte il faut
lire le fichier ligne par ligne jusqu'à arriver à la
ligne à modifier et bien sûr le recréer. En tout cas avec
les moyens standards de C#.



>-----Original Message-----
>Bonjour,
>je suis novice en manipulation de fichier, et je n'ai
pas trouvé de méthode
>qui vide un fichier texte.
>De plus, est-il possible de modifier une ligne d'un
fichier (quitte à la
>réécrire entièrement, mais à la même place) ?
>
>Merci
>.
>





Avatar
frédo
Il n'y a rien dans File qui permet de vider.
C'est juste une classe qui permet de par exemple deleter
ton fichier, obtenir directement un flux vers le
fichier...

Il y a une autre classe similaire: FileInfo. La
différence est qu'elle ne propose que des méthodes
d'instance.
Si tu as de nombreuses manipulation à faire sur le
fichier, elle est sans doute plus rentable


-----Original Message-----
Fredo, j'avais effectivement pensé à recréer le


fichier, mais je trouve
incroyable qu'on soit obligé de passer par là pour


cette opération.

Jean-Marc, de quel traitement parles-tu ? De recréer le


fichier ou de le
vider ? Si c'est de le vider, peux-tu me donner la


méthode adéquate car je ne
la trouve vraiment pas.

D'avance merci

"Jean-marc Sennechael" wrote:

Bonjour,

La classe System.IO.File fournit toutes les méthodes




utiles pour réaliser ce
traitement.

Cordialement,


Jean-Marc Sennechael
Microsoft France - MCS

Ce message est fourni en l'état, sans garantie




d'aucune sorte et ne vous
confère aucun droit. Vous assumez tous les risques




liés à son utilisation.


"frédo" wrote




in message
news:18c201c4dbb5$b8914c30$
pour vider le fichier, je pense qu'il faut le recréer

pour modifier une ligne dans un fichier texte il faut
lire le fichier ligne par ligne jusqu'à arriver à la
ligne à modifier et bien sûr le recréer. En tout




cas avec
les moyens standards de C#.



>-----Original Message-----
>Bonjour,
>je suis novice en manipulation de fichier, et je n'ai
pas trouvÃf© de mÃf©thode
>qui vide un fichier texte.
>De plus, est-il possible de modifier une ligne d'un
fichier (quitte Ãf la
>rÃf©Ãf©crire entiÃf¨rement, mais Ãf la mÃfªme




place) ?
>
>Merci
>.
>





.



Avatar
Zazar
Bonsoir,

Fredo, j'avais effectivement pensé à recréer le fichier, mais je trouve
incroyable qu'on soit obligé de passer par là pour cette opération.



Si vous utilisez la méthode File.Open, vous ouvrez le fichier et tout ce que
vous écrivez dedans substituera l'ancien contenu.

--
Zazar
Avatar
Zazar
Bonsoir,

Il n'y a rien dans File qui permet de vider.
C'est juste une classe qui permet de par exemple deleter
ton fichier, obtenir directement un flux vers le
fichier...

Il y a une autre classe similaire: FileInfo. La
différence est qu'elle ne propose que des méthodes
d'instance.
Si tu as de nombreuses manipulation à faire sur le
fichier, elle est sans doute plus rentable



Je ne sais pas ce que vous entendez par "de nombreuses manipulations", mais
si vous voulez dire par exemple qu'il est plus rapide d'appeler n fois la
méthode Open() de FileInfo que d'appeler n fois sur File (sur un même
fichier), c'est faux : les 2 méthodes font la même chose (à savoir appeler
le même constructeur de FileStream). Et de toute façon, même s'il y avait
une petite différence, elle aurait été certainement négligeable par rapport
aux temps d'accés disque.

--
Zazar
Avatar
ce n'est pas ce que dit la doc

-----Original Message-----
Bonsoir,

Il n'y a rien dans File qui permet de vider.
C'est juste une classe qui permet de par exemple




deleter
ton fichier, obtenir directement un flux vers le
fichier...

Il y a une autre classe similaire: FileInfo. La
différence est qu'elle ne propose que des méthodes
d'instance.
Si tu as de nombreuses manipulation à faire sur le
fichier, elle est sans doute plus rentable



Je ne sais pas ce que vous entendez par "de nombreuses


manipulations", mais
si vous voulez dire par exemple qu'il est plus rapide


d'appeler n fois la
méthode Open() de FileInfo que d'appeler n fois sur File


(sur un même
fichier), c'est faux : les 2 méthodes font la même chose


(à savoir appeler
le même constructeur de FileStream). Et de toute façon,


même s'il y avait
une petite différence, elle aurait été certainement


négligeable par rapport
aux temps d'accés disque.

--
Zazar


.



Avatar
Zazar
Bonsoir,

ce n'est pas ce que dit la doc



La doc dit :

"Si vous souhaitez réutiliser un objet plusieurs fois, l'utilisation de la
méthode d'instance de FileInfo à la place des méthodes static
correspondantes de la classe File peut être préférable, parce qu'un contrôle
de sécurité ne sera pas toujours nécessaire"

Ca mérite une traduction :

Pour certaines fonctions (AppendText et OpenText), la classe File fait une
vérification sur l'argument (est-il null?) alors que la classe FileInfo ne
fait la vérification que dans le constructeur. Donc effectivement, il y a un
contrôle supplémentaire. Seulement ces fonctions appellent un constructeur
qui fait lui aussi la vérification.
Autrement dit avec la classe File on a 2 vérifications, avec la classe
FileInfo, on en a 1 seule. Mais quand le JIT va voir les 2 vérifications
identiques l'une aprés l'autre, il va retirer la 2ième. Donc au final, au
niveau performances on se retrouve avec la même chose (et de toute façon
comme dit précédemment, un test de valeur nulle est totalement négligeable
devant un accés disque). Mais il reste que FileInfo permet d'avoir un joli
objet bien typé au lieu d'une simple string.

--
Zazar
Avatar
frédo
je me permets d'insister, la doc dit:
"parce qu'un contrôle de sécurité ne sera pas toujours
nécessaire"

Il y a a un moment une remontée de la pile des appels (un
Demand) qui est fait dans le constructeur de FileInfo et
pour chaque méthode de File.

On ne peut pas dire que ce soit gratuit.

Par contre il serait bien que la doc précise ce qu'elle
entends par "pas toujours nécessaire".


-----Original Message-----
Bonsoir,

ce n'est pas ce que dit la doc



La doc dit :

"Si vous souhaitez réutiliser un objet plusieurs fois,


l'utilisation de la
méthode d'instance de FileInfo à la place des méthodes


static
correspondantes de la classe File peut être préférable,


parce qu'un contrôle
de sécurité ne sera pas toujours nécessaire"

Ca mérite une traduction :

Pour certaines fonctions (AppendText et OpenText), la


classe File fait une
vérification sur l'argument (est-il null?) alors que la


classe FileInfo ne
fait la vérification que dans le constructeur. Donc


effectivement, il y a un
contrôle supplémentaire. Seulement ces fonctions


appellent un constructeur
qui fait lui aussi la vérification.
Autrement dit avec la classe File on a 2 vérifications,


avec la classe
FileInfo, on en a 1 seule. Mais quand le JIT va voir les


2 vérifications
identiques l'une aprés l'autre, il va retirer la 2ième.


Donc au final, au
niveau performances on se retrouve avec la même chose


(et de toute façon
comme dit précédemment, un test de valeur nulle est


totalement négligeable
devant un accés disque). Mais il reste que FileInfo


permet d'avoir un joli
objet bien typé au lieu d'une simple string.

--
Zazar



.



Avatar
Zazar
Bonsoir,

je me permets d'insister, la doc dit:
"parce qu'un contrôle de sécurité ne sera pas toujours
nécessaire"

Il y a a un moment une remontée de la pile des appels (un
Demand) qui est fait dans le constructeur de FileInfo et
pour chaque méthode de File.

On ne peut pas dire que ce soit gratuit.



Par contre il serait bien que la doc précise ce qu'elle
entends par "pas toujours nécessaire".



Vous faîtes bien d'insister, vous venez de me faire découvrir que le
constructeur de FileInfo faisait un FileIOPermission.Demand(). Cependant, je
maintiens que les codes d'exécution des fonctions Open() ,Append() & co des
classes File et FileInfo sont quasi-identiques. Il y a donc certes un Demand
fait pour chaque méthode de File, mais aussi pour chaque méthode de
FileInfo.

--
Zazar