Это не из-за File.AppendAllText
, но вместо того, чтобы эта строка кода:
File.Create(LogPath);
Как на the documentation of File.Create(string):
Возвращаемое значение
Тип: System.IO.FileStream
FileStream, который обеспечивает доступ для чтения/записи к файлу, указанному в пути.
Это возвращает открытый FileStream
объект. Вы должны избавиться от этого объекта, чтобы закрыть поток и освободить файл. Если вы этого не сделаете, этот объект будет держать файл открытым до тех пор, пока GC не завершает работу объекта в какой-то более поздний неопределенный момент времени.
Вот как написать эту строку кода, либо один из следующих двух вариантов будет работать:
File.Create(LogPath).Dispose();
using (File.Create(LogPath)) { }
Что произошло, что второй раз, когда ваша программа выполняет файл существует, так что вы его удалили, а затем воссоздал его, но часть «воссоздала его» сохранила файл открытым, поэтому, когда он на короткое время дошел до метода File.AppendAllText
, файл все еще был открыт.
Примечание: Если вы всегда вызов File.AppendAllText
вы можете просто просто удалить его, так как AppendAllText
создаст файл, если он уже не существует, так как в the documentation of File.AppendAllText:
Открывает файл, добавляет указанную строку в файл и затем закрывает файл. Если файл не существует, этот метод создает файл, записывает указанную строку в файл, а затем закрывает файл.
(курсив мой)
Два экземпляра программы работают одновременно? –
- это единственный код, который влияет на файл, указанный в LogPath? Я бы ожидал ошибку с 'File.Delete (LogPath);' перед тем, как вы даже дойдете до 'File.AppendAllText (LogPath, logMessage);'. –