0
votes

La méthode WriteAlltext renvoie la dernière ligne, au lieu de toutes les lignes du fichier.

J'ai un code qui:

  • lit un fichier texte,
  • remplace tous les "espaces" avec ";",
  • supprime la répétition du personnage ";"
  • et enregistre un nouveau fichier avec toutes les modifications.

    mais au lieu d'écrire toutes les lignes du fichier, il n'écrit que la dernière ligne. xxx

     fichier texte:

     fichier texte après le code:

    Quelqu'un peut-il m'aider avec ceux-ci? Merci d'avance!


2 commentaires

Pourriez-vous imaginer ce que WriteAlltext () fait juste par le nom? La première phrase de Docs. microsoft.com/en-us/dotnet/api/... peut aider. Peut-être que vous recherchez Docs. microsoft.com/en-us/dotnet/api/...


Vous init ligne1 par chaîne ligne1 = ligne.replace ('', ';'; '); et ensuite vous écrasez cette valeur par line1 = regex.replace (ligne, "); / code>. Est-il attendu?


3 Réponses :


1
votes

Vous avez besoin fichier.appendallText () .

Vous écrasez chaque ligne précédente avec le nouveau, c'est pourquoi vous ne voyez que la dernière ligne d'entrée.


0 commentaires

3
votes

the fichier. Méthode WriteAllText DO:

crée un nouveau fichier, écrivez le contenu dans le fichier, puis ferme le fichier. Si le fichier cible existe déjà, il est écrasé. P> blockQuote>

Vous écrivez-vous dans chaque ligne lue ... Vous pouvez utiliser StringBuilder Pour le faire: P>

static void Main(string[] args)
{
    RegexOptions options = RegexOptions.None;
    Regex regex = new Regex("[ ]{2,}", options);
    
    string FilePath = @"C:\Users\User\Desktop\download1.txt";
    string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";

    List<string> lines = new List<string>();
    lines = File.ReadAllLines(FilePath).ToList();
    var sb = new StringBuilder();

    foreach (string line in lines)
    {
        string line1 =  line.Replace(' ', ';');
        line1 = regex.Replace(line, ";");
        Console.WriteLine(line1);
        sb.AppendLine(line1);
    }
    
    File.WriteAllText(OutputhFilePath, sb.ToString());
    Console.ReadLine();
}


1 commentaires

Sb.writeline (Line1) devrait être - SB.Appordline (ligne1), mais le reste fonctionne. Merci!



1
votes

Le problème est que vous émettez au fichier après chaque ligne. Quel fichier.writetealltext est-il toujours écrasé le fichier cible avec les dernières données. Ce dont vous avez besoin, c'est ajouter au fichier. Essayez par exemple le Fichier.appendtext méthode .

Cependant, une solution encore meilleure est d'utiliser un StringBuilder , appendez toutes les lignes à elle, puis sur la sortie du contenu entier ( Builder.tostring () ) à la fois. Cela évite une ouverture et une fermeture excessives du fichier après chaque ligne.


0 commentaires