2011-06-18 3 views
0

Quelqu'un pourrait-il démontrer comment copier toutes les lignes d'un fichier texte à un autre (sans écraser le fichier de destination, par exemple:Copier le texte d'un fichier texte à un autre

fichier suspentes copie au fichier B (sans écraser le lignes existantes dans FICHB -.. en ajoutant les)

+1

Travail à domicile? Ça sent comme ça. –

Répondre

4

Cela ressemble à des devoirs, donc je vais vous donner quelques conseils

Ouvrez le premier fichier avec les paramètres FileMode.Open et FileAccess.Read Ouvrez le second fichier avec FileMode.Append et FileAccess.Write paramètres

Parcourez le premier fichier en écrivant à la seconde ce que vous lisez en premier. Pour plus d'informations, consultez la classe FileStream pour plus d'informations.

+0

Pourquoi ne pas utiliser les méthodes de la classe File à la place? Boucler sur un FileStream est un peu redondant si on peut simplement appeler ReadLines et tel IMO. – Neowizard

+0

Pas de devoirs mate :) – Ben

+0

@Neowizard: 'File.ReadLines' peut être plus pratique pour le programmeur, mais beaucoup moins utile à l'utilisateur si le fichier est plus grand que votre RAM ou votre espace d'adressage virtuel. – Timwi

0

Voici ma solution. Hope it helps:

Dim fileAContent As String = "" 

    Using strR As New IO.StreamReader(fileAPath) 
     fileAContent = strR.ReadToEnd 
    End Using 

    Using strW As New IO.StreamWriter(fileBPath, True) 
     strW.Write(fileAContent) 
     strW.Flush() 
    End Using 

Le second paramètre de StreamWriter est la clé. Il va ajouter contenu à la fin du fichier.

Lisez d'abord toutes les lignes du premier fichier et ensuite ajoutez-les au second fichier.

0

Espérons que cette réponse vous aide. Je l'ai écrit d'une manière que vous pouvez suivre pour vous donner une bonne compréhension des étapes. Pour commencer, remplacez les fichiers par les vôtres puis exécutez le code pour voir s'il vous donne le résultat souhaité.

var file1 = @"C:\Users\User\Desktop\file1.txt"; 
var file2 = @"C:\Users\User\Desktop\file2.txt"; 

var file1Lines = File.ReadAllLines(file1); 
var file2Lines = File.ReadAllLines(file2).ToList(); 

// before the copy 
Console.WriteLine("**Before the copy**"); 
Console.WriteLine(File.ReadAllText(file2)); 

foreach (var l in file1Lines) 
{ 
    file2Lines.Add(l); 
} 
File.WriteAllLines(file2, file2Lines); 

// after the copy 
Console.WriteLine("**After the copy**"); 
Console.WriteLine(File.ReadAllText(file2)); 
+0

Cela devrait fonctionner, mais puisque le but est d'ajouter les lignes de 'file1' à' file2', il ne devrait pas être nécessaire de lire le contenu existant de 'file2'; il suffit d'ajouter le contenu de 'file1' à ce qui est déjà là. Il est plus efficace et moins de lignes de code pour supprimer toutes les utilisations de 'file2Lines' et il suffit d'ajouter' File.AppendAllLines (file2, file1Lines); '. – BACON

+0

@BACON le fait comme vous le suggérez ne pas ajouter correctement les lignes de la liste. La première ligne de file1Lines est ajoutée à la dernière ligne de file2 – dek

+0

Je vois ce que vous voulez dire. Cela dépend vraiment si les fichiers se terminent sur un caractère de retour à la ligne ou non et quel est le comportement souhaité. Si le texte ajouté doit commencer sur une nouvelle ligne, alors 'File.AppendAllText (file2, Environment.NewLine);' peut être inséré avant l'appel de 'File.AppendAllLines', ou changer l'appel en' File.AppendAllLines (file2, new [] {Environment.NewLine} .Concat (file1Lines)); '. – BACON

Questions connexes