С# - программа не перезаписывает существующий текстовый файл

Моя система создает текстовый файл при первом нажатии кнопки программы и добавляет к нему различные вещи при нажатии других кнопок. В идеале все должно быть сохранено в конце, но поскольку это система мониторинга, использующая таймер, некоторые данные необходимо записывать в файл в определенное время, иначе они будут потеряны.

При нажатии первой кнопки (btnStart) программа находит/создает основную папку (имя которой дается с помощью постоянной строки) и находит/создает вложенную папку (используя текст, введенный в текстовые поля комбинации до нажатия кнопки). устанавливает каталог для текстового файла, как показано ниже в строке (fileName):

    private void createDirectory()
    { //create output file in this folder using owner name and current date

        //main folder path (contains all files output from system)
        string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Horse Monitoring Records";
        //sub folder path (each patient has individual subfolder)
        string subDirectory = rootDirectory + "\\" + txtPatName.Text + "/" + txtOwnerName.Text;
        //file name (patient has file created for each operation)
        fileName = subDirectory +  "\\" + txtOwnerName.Text + "/(" + DateTime.Now.Date.ToString("dd-MM-yyyy") + ").txt";

        if (!Directory.Exists(rootDirectory)) //if main folder does not exist...
        {
            Directory.CreateDirectory(rootDirectory); //create it in My Documents
        }
        if (!Directory.Exists(subDirectory)) //if patient sub folder does not exist...
        {
            Directory.CreateDirectory(subDirectory); //create it in Patient-Owner format
        }
    }

Следующая вызываемая функция записывает в файл первый бит текста, как показано ниже:

    private void saveFileDetails()
    {
        //Once case details have been entered, create new file using these details and add data input structure
        StreamWriter consoleFile = new StreamWriter(fileName, true);

        consoleFile.WriteLine("------------------------------------------- Case Details -------------------------------------------");
        consoleFile.WriteLine("\n\n");

        //patient and vet details
        ...
        }

Первоначально, когда я устанавливал эту функцию, я не включал «истинную» перегрузку для StreamWriter в первой строке функции. Это привело к ошибке во время выполнения, которая сообщила мне, что текстовый файл не может быть открыт, так как он уже был открыт другим процессом.

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

Мне нужно иметь возможность перезаписывать файлы, поскольку они устаревают через некоторое время и нуждаются в замене. Кто-нибудь знает, куда я могу пойти отсюда, чтобы решить эту проблему?

Спасибо, Марк


person marcuthh    schedule 28.06.2015    source источник


Ответы (1)


Перегрузка StreamWriter, которая принимает логическое значение, подробно описана здесь. true заставляет добавить содержимое. Если вы всегда хотите переопределить файл, вы можете использовать File.OpenWrite; Я считаю, что вы также можете передать это конструктору следующим образом:

new StreamWriter(File.OpenWrite(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))

См. дополнительные сведения о File.OpenWrite и FIleMode. File.OpenWrite может выполнять эту работу сам по себе, если вы хотите использовать его вместо этого. Но я считаю, что поскольку File.OpenWrite возвращает FIleStream, его можно передать конструктору StreamWriter.

person Brian Mains    schedule 28.06.2015