2009-01-04 12 views
4

Y a-t-il un moyen d'écrire du texte dans un fichier à partir d'un certain point du fichier? Par exemple, j'ouvre un fichier de 10 lignes de texte mais je veux écrire une ligne de texte sur la 5ème ligne. Je suppose que l'one-way est de récupérer les lignes de texte dans le fichier en tant que tableau en utilisant la méthode readalllines, puis d'ajouter une ligne à un certain index dans le tableau. Mais il y a une distinction en ce sens que certaines collections peuvent seulement ajouter des membres à la fin et d'autres à n'importe quelle destination. Pour vérifier, un tableau me permettrait toujours d'ajouter une valeur à n'importe quel index, n'est-ce pas? (Je suis sûr que l'un de mes livres a dit autre chose).Écrire du texte au milieu d'un fichier

De plus, y a-t-il une meilleure façon de procéder?

Merci

+0

double: http://stackoverflow.com/questions/98484/how-to-insert-characters-to-a-file-using-c –

+0

similaires à: http://stackoverflow.com/questions/289965/insertion de texte dans un fichier existant via Java; http://stackoverflow.com/questions/125703/how-do-i-modify-a-text-file-in-python –

Répondre

3

Oh, soupir. Recherchez l'algorithme "mise à jour du fichier principal".

est ici pseudocode:

open master file for reading. 
count := 0 
while not EOF do 
    read line from master file into buffer 
    write line to output file  
    count := count + 1 
    if count = 5 then 
     write added line to output file 
    fi 
od 
rename output file to replace input file 
1

Si vous lecture/écriture de petits fichiers (disons, moins de 20 méga-octets - oui, je considère 20M « petit ») et ne pas les écrire que souvent (comme dans, pas plusieurs fois par seconde) alors il suffit de lire/écrire le tout.

Les fichiers série tels que les documents texte ne sont pas conçus pour un accès aléatoire. C'est à ça que servent les bases de données.

1

using System;

en utilisant System.Collections.Generic;

en utilisant System.Linq;

en utilisant System.Text;

public class Class1 
{      
    static void Main() 
    { 
     var beatles = new LinkedList<string>(); 

     beatles.AddFirst("John");       
     LinkedListNode<string> nextBeatles = beatles.AddAfter(beatles.First, "Paul"); 
     nextBeatles = beatles.AddAfter(nextBeatles, "George"); 
     nextBeatles = beatles.AddAfter(nextBeatles, "Ringo"); 

     // change the 1 to your 5th line 
     LinkedListNode<string> paulsNode = beatles.NodeAt(1); 
     LinkedListNode<string> recentHindrance = beatles.AddBefore(paulsNode, "Yoko"); 
     recentHindrance = beatles.AddBefore(recentHindrance, "Aunt Mimi"); 
     beatles.AddBefore(recentHindrance, "Father Jim"); 


     Console.WriteLine("{0}", string.Join("\n", beatles.ToArray())); 

     Console.ReadLine();      
    } 
} 

public static class Helper 
{ 
    public static LinkedListNode<T> NodeAt<T>(this LinkedList<T> l, int index) 
    { 
     LinkedListNode<T> x = l.First; 

     while ((index--) > 0) x = x.Next; 

     return x; 
    } 
} 
Questions connexes