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

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

При нажатии первой кнопки (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)


arrow_upward
0
arrow_downward

Перегрузка 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