Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[File]Ecrire dans un fichier text en début de fichier

10 réponses
Avatar
404 found
Bonjour,
je suis en train de travailler sur les fichiers texts.
j'ai vu les classes Write et WriteLine et ces 2 classes écrivent bien dans
un fichier texte mais à la fin du fichier!
Peut être qu'il ya une propriété pour lui dire d'écrire en début de fichier
ou une astuce que je n'arrive pas à trouver !

Merci de votre aide !

10 réponses

Avatar
Titeuf [VB.Net 2005]
Bonjour,
As-tu consulter la réponse à ta question sur le forum codes-sources
http://www.vbfrance.com/forum.v2.aspx?IDV0559

"404 found" a écrit dans le message de
news:
Bonjour,
je suis en train de travailler sur les fichiers texts.
j'ai vu les classes Write et WriteLine et ces 2 classes écrivent bien dans
un fichier texte mais à la fin du fichier!
Peut être qu'il ya une propriété pour lui dire d'écrire en début de
fichier
ou une astuce que je n'arrive pas à trouver !

Merci de votre aide !


Avatar
404 found
je viens de voir la réponse !!

Willi a dis "La solution qui me parait la plus simple est de lire dans un
premier temps ton fichier et de récupérer sont contenu.
Une fois ceci fait, tu peux récrire ton fichier en concaténant ce que tu as
récupérer de ton fichier au ligne que tu veux insérer.

Voici un exemple

Dim sContenu As String
Dim sWriteText As String
Dim sNewLine As String = "Bonjour........" & ControlChars.CrLf & "Je
m'apel toto"

'lecture du fichier
sContenu = IO.File.ReadAllText("c:1.txt")

'ecriture du fichier
sWriteText = sNewLine & ControlChars.CrLf & sContenu
IO.File.WriteAllText("c:1.txt", sWriteText)

mais bon, le but est d'écrire un fichier log (donc dernier évenement en
premier lieux) et le fichier log peut avoir des centaines de lignes, les
lires et les écrires me parait un peu lourd !!

Pas de solution plus simple !!


"Titeuf [VB.Net 2005]" a écrit :

Bonjour,
As-tu consulter la réponse à ta question sur le forum codes-sources
http://www.vbfrance.com/forum.v2.aspx?IDV0559

"404 found" a écrit dans le message de
news:
> Bonjour,
> je suis en train de travailler sur les fichiers texts.
> j'ai vu les classes Write et WriteLine et ces 2 classes écrivent bien dans
> un fichier texte mais à la fin du fichier!
> Peut être qu'il ya une propriété pour lui dire d'écrire en début de
> fichier
> ou une astuce que je n'arrive pas à trouver !
>
> Merci de votre aide !





Avatar
Fabien Bezagu
> mais bon, le but est d'écrire un fichier log (donc dernier évenement en
premier lieux) et le fichier log peut avoir des centaines de lignes, les
lires et les écrires me parait un peu lourd !!



Un fichier log est en général écrit en ajoutant les lignes à la fin.
L'inverse est înhabituel et serait plutôt bizzare....
Avatar
404 found
> > mais bon, le but est d'écrire un fichier log (donc dernier évenement en
> premier lieux) et le fichier log peut avoir des centaines de lignes, les
> lires et les écrires me parait un peu lourd !!

Un fichier log est en général écrit en ajoutant les lignes à la fin.
L'inverse est înhabituel et serait plutôt bizzare....



Bon j'ai voulu faciliter le travail de l'assistance en double cliquant sur
le .log, elle aura la dernière ligne en face (mieux de scroller) mais bon
vous avez peut être raison à la fin !! je laisse comme ça en attendant les
remarques du client !

Merci de votre aide
Avatar
404 found
Sinon pour ceux que cela leur intéresse :

http://www.vbfrance.com/code.aspx?ID 500
Avatar
Titeuf [VB.Net 2005]
Merci pour ce lien je vais jeter un coup d'oeil :)

"404 found" a écrit dans le message de
news:
Sinon pour ceux que cela leur intéresse :

http://www.vbfrance.com/code.aspx?ID 500



Avatar
Francois Muller
"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> a écrit dans le message de news:

Un fichier log est en général écrit en ajoutant les lignes à la fin.
L'inverse est înhabituel et serait plutôt bizzare....



Ca depend. Quand on veut gérer des logs "circulaires" ca peut avoir son
interêt.

F.
Avatar
Patrick Philippot
Bonjour,

Bon j'ai voulu faciliter le travail de l'assistance en double
cliquant sur le .log, elle aura la dernière ligne en face (mieux de
scroller) mais bon vous avez peut être raison à la fin !! je laisse
comme ça en attendant les remarques du client !



Une bonne occasion de faire à nouveau un petit discours sur la confusion
traitement / présentation.

La manière la plus efficace de stocker vos infos est bien évidemment de
faire un append à la fin du fichier. Surtout pour un fichier journal, la
préoccupation doit être de ne pas mobiliser trop de temps machine pour
simplement stocker une ligne de texte. Plus l'ajout est fréquent, plus
cette remarque est valide.

Maintenant, vos enregistrement sont certainement affectés d'une date et
espérons le, les champs sont de longeur fixe, au moins les premiers de
la ligne. Ce qui veut dire que vous pouvez trier sur la date, sur le
type d'enregistrement, etc.
Vous pouvez donc écrire facilement une petite visionneuse permettant de
charger vos .log et de les voir par date croissante ou décroissante, par
type d'enregistrement, etc. A la limite, un éditeur de texte capable de
trier sur le contenu d'un bloc (colonnes) fera l'affaire.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
TroXsA - [VB.NET-2005]
Personnellement j'aurait utilisé un tableau (Array)
Dans un premier temps lire le fichier et le mettre dans
le tableau puis faire insertion de la ligne desirer en debut
de mon tableau puis finir par l'ecriture ... mais bon
chacun fait comme y veux :)
puis mon exemple n'est peut etre pas super bon quand
on a un fichier de 80 Mo ...

--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl
Avatar
Patrick Philippot
Bonjour,

TroXsA - [VB.NET-2005] wrote:
Personnellement j'aurait utilisé un tableau (Array)
puis mon exemple n'est peut etre pas super bon quand
on a un fichier de 80 Mo ...



Effectivement.

Pour les gros volumes, une solution élégante (dont il faudrait vérifier
la performance), consisterait à utiliser un (ou deux) memory mapped
file(s).

Délirons un peu (ce qui suit n'est pas n'est pas très orthodoxe sous
.Net, l'accès aux MMFs dans cet environnement n'étant pas immédiat.
P/invoke nécessaire et peut-être Interop pour l'encapsulation)...

Solution #1

On crée un MMF sur le fichier log existant et avec une taille égale à la
taille du fichier + la taille de la ligne à insérer. On fait un move du
block mémoire vers la droite en dégageant la place nécessaire à la
nouvelle ligne en début de bloc.

Solution #2

On ouvre un MMF sur le log existant. On ouvre un deuxième MMF de taille
égale à la taille du log existant + la taille de la ligne à insérer. On
écrit la nouvelle ligne en début de buffer. On copie le bloc mémoire
représentant le log existant à l'offset pointant après la nouvelle
ligne. On ferme les 2 MMF, on détruit le fichier log existant.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr