Очистить текст из файла на c#

Пожалуйста помогите мне. Я пытаюсь сделать так, чтобы при клике на кнопку, очистился весь текст в файле.

Есть вопросы, задавайте мне.

Вот мой код:

private void button2_Click(object sender, EventArgs e)
    {
        string PathFile = @"D:\ds\database.txt";
        List<string> lines = new List<string>();
        
        File.Delete(PathFile);

        string test = "hello";

        File.Create(PathFile);
        lines.Add(test);
        File.WriteAllLines(PathFile, lines);
    }

Но проблема заключается в том, что выдает мне ошибку. Помогите мне пожалуйста.


Ответы (1 шт):

Автор решения: aepot

Короткий ответ: попытка открыть уже открытый с монопольным доступом на чтение файл вызвала исключение.

Вы перемудрили. File.Create(PathFile); не просто создает файл, а открывает его. Обычно этот метод используют так.

using (FileStream fs = File.Create(path))
{
    // здесь запись в файл
}

FileStream это IDisposable объект. Он держит файл открытым, пока вы его не задиспозите через using, Close() или Dispose(). Ошибка возникает, когда вы повторно обращаетесь к уже открытому файлу.

То есть проблему можно легко исправить вот так:

File.Create(PathFile).Close();

Но вы слишком много делаете лишних манипуляций.

Логику файла в вашем коде можно прочитать так:

  • удалить файл
  • открыть файл на перезапись с полной очисткой, создать, если не существует (здесь не хватает "закрыть")
  • открыть файл на перезапись с полной очисткой, создать, если не существует, записать туда строки, закрыть файл

Зачем столько раз делать одно и то же?

Исправленный код

private void button2_Click(object sender, EventArgs e)
{
    string PathFile = @"D:\ds\database.txt";
    List<string> lines = new List<string>();
    string test = "hello";
    lines.Add(test);
    File.WriteAllLines(PathFile, lines);
}

Содержимое файла будет просто перезаписано. Если файла нет, он будет создан автоматически.

Чтобы дозаписать строчки в конец не удаляя предыдущие, то надо использовать AppendAllLines.

→ Ссылка