web-dev-qa-db-fra.com

Créer un fichier Txt et y écrire

Je veux créer un fichier texte puis y ajouter le texte d'un TextBox. La création du fichier texte fonctionne sans problème avec le code suivant:

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    File.Create(path);
}

Mais j'obtiens une erreur indiquant que le fichier est utilisé lorsque j'essaie d'ajouter le texte au fichier texte. Si le fichier existe déjà avant d'exécuter le code, je ne reçois pas cette erreur et le TextBox.Text est ajouté au fichier. J'utilise ce code pour ajouter le texte au fichier texte:

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    if (File.Exists(path))
    {
        using (var tw = new StreamWriter(path, true))
        {
            tw.WriteLine(TextBox1.Text);
            tw.Close();
        }
    }
}

Pouvez-vous m'aider?

4
Morris

Si le fichier existe, il peut être remplacé ou ajouté à. Si le fichier n'existe pas, ce constructeur crée un nouveau fichier. Vous n'avez donc pas besoin de vérifier si le fichier existe ou non.

Vous devez vous assurer que le fichier est fermé avant de le modifier.

0
jerry

Comme vous pouvez le voir ici, StreamWriter créera en fait un fichier sur le chemin spécifié lorsqu'il n'existe pas, il est donc inutile de le vérifier.

Je suggère de supprimer la partie qui crée le fichier et de simplement commencer à écrire:

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    using (var tw = new StreamWriter(path, true))
    {
        tw.WriteLine(TextBox1.Text);
        tw.Close();
    }
}

Mais si vous voulez vraiment créer le fichier au préalable, pensez à DisposeFileStream objet créé par File.Create appel. Dispose appel appellera automatiquement Flush et Close pour vous donc c'est assez sûr et vous pouvez le faire de plusieurs façons comme ceci:

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    using ( File.Create(path) ) ; // This will generate warnings that you're not using the object and so on, but that's okay,
}

Ou comme ça:

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    FileStream fs = File.Create(path);
    fs.Dispose();
}
0
Mateusz