web-dev-qa-db-fra.com

Quel est le moyen le plus simple d'écrire le contenu d'un StringBuilder dans un fichier texte dans .NET 1.1?

Je dois utiliser StringBuilder au lieu d'une liste de chaînes à cause d'être bloqué avec .NET 1.1 pour ce projet. Mon style est vraiment à l'étroit, et je me sens comme si je portais de vieux lambeaux de peau de léopard et je traîne un bâton grumeleux dans la boue.

Quoi qu'il en soit, je veux écrire une série de messages de débogage que j'ai écrits dans un fichier pour pouvoir les étudier à loisir, car il y a trop à voir à l'écran (la MessageBox ne comporte pas de barres de défilement). Certains des moyens faciles d'écrire un fichier ne semblent pas être disponibles dans .NET 1.1. De plus, je n'ai pas accès à Environment.Newline pour séparer proprement les lignes que je joins (AppendLine n'est pas disponible dans cette version archaïque de StringBuilder non plus).

Assez de gémissements, je suppose ... Quel est le moyen le plus simple dans .NET 1.1 (C #) d’écrire le contenu du StringBuilder dans un fichier? Il n'y a pas de lecteur "C" sur le périphérique de poche, donc je pense que je devrai l'écrire dans "\ hereIAm.txt" ou à peu près.

46
B. Clay Shannon

Vous avez toujours accès à StreamWriter:

System.IO.StreamWriter file = new System.IO.StreamWriter(@"\hereIam.txt");
file.WriteLine(sb.ToString()); // "sb" is the StringBuilder

De la documentation MSDN: écriture dans un fichier texte (Visual C #).

71
Darren

Je sais que c’est un vieux message et qu’il veut une réponse pour .NET 1.1, mais il existe déjà une très bonne réponse à cette question. Je pensais que ce serait bien d’avoir une réponse pour les personnes qui atterriraient sur ce message et qui pourraient disposer d’une version plus récente du framework .Net, comme par exemple moi-même lorsque je cherchais une réponse à la même question.

Dans ces cas, il existe un moyen encore plus simple d'écrire le contenu d'un StringBuilder dans un fichier texte. Cela peut être fait avec une ligne de code. Ce n'est peut-être pas le plus efficace, mais ce n'était pas vraiment la question qui se posait maintenant.

System.IO.File.WriteAllText(@"C:\MyDir\MyNewTextFile.txt",sbMyStringBuilder.ToString());
88
dscarr

Pas besoin d'un StringBuilder:

string path = @"c:\hereIAm.txt";
if (!File.Exists(path)) 
{
    // Create a file to write to.
    using (StreamWriter sw = File.CreateText(path)) 
    {
        sw.WriteLine("Here");
        sw.WriteLine("I");
        sw.WriteLine("am.");
    }    
} 

Mais vous pouvez bien sûr utiliser StringBuilder pour créer toutes les lignes et les écrire dans le fichier à la fois.

sw.Write(stringBuilder.ToString());

StreamWriter.Write Méthode (Chaîne) (.NET Framework 1.1)

Écriture de texte dans un fichier (.NET Framework 1.1)

6
Tim Schmelter

StreamWriter est disponible pour NET 1.1. et pour le cadre compact . Ouvrez simplement le fichier et appliquez ToString à votre StringBuilder:

    StringBuilder sb = new StringBuilder();
    sb.Append(......);

    StreamWriter sw = new StreamWriter("\\hereIAm.txt", true);
    sw.Write(sb.ToString());
    sw.Close();

En outre, notez que vous dites que vous souhaitez ajouter des messages de débogage au fichier (comme un journal). Dans ce cas, le constructeur correct pour StreamWriter est celui qui accepte un indicateur booléen append. Si la valeur est true, il essaie d'ajouter un fichier existant ou d'en créer un nouveau s'il n'existe pas.

4
Steve

Si vous devez écrire ligne par ligne à partir du constructeur de chaînes

StringBuilder sb = new StringBuilder();
sb.AppendLine("New Line!");

using (var sw = new StreamWriter(@"C:\MyDir\MyNewTextFile.txt", true))
{
   sw.Write(sb.ToString());
}

Si vous devez écrire tout le texte sur une seule ligne à partir du constructeur de chaînes

StringBuilder sb = new StringBuilder();
sb.Append("New Text line!");

using (var sw = new StreamWriter(@"C:\MyDir\MyNewTextFile.txt", true))
{
   sw.Write(sb.ToString());
}
2
Ahmad Alaa