Чтение / запись текстового файла повторно / одновременно - PullRequest
3 голосов
/ 20 июля 2010

Как мне читать и писать в текстовом файле без исключения, что «Файл уже используется другим приложением» ??

Я пробовал функции File.readalltext () и File.Appendalltext ()..Я только начинаю с файлового потока.

Что сработает лучше всего в моем сценарии?Буду признателен за некоторые фрагменты кода ..

Спасибо

Ответы [ 2 ]

6 голосов
/ 20 июля 2010

Это все, что связано с семантикой блокировки и совместного использования, которую вы запрашиваете при открытии файла.

Вместо использования быстрого доступа File.ReadAllText(), попробуйте использовать System.IO.FileStream и System.IO.StreamReader / System.IO.StreamWriter.

Чтобы открыть файл:

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var streamReader = new StreamReader(fileStream))
{
  var someText = streamReader.ReadToEnd();
}

Обратите внимание на FileShare.ReadWrite - это указание потоку разрешить передачу другим читателям или другим авторам.

Для письма попробуйте что-то вроде

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read))
using (var streamWriter = new StreamWriter(fileStream))
{
  streamWriter.WriteLine("some text");
}

Обратите внимание на FileShare.Read - это говорит потоку разрешить доступ только для читателей.

Прочитайте информацию о System.IO.FileStream и его перегрузках конструктора, и вы сможете точно настроить его поведение в соответствии с вашими целями.

1 голос
/ 20 июля 2010

Необходимо убедиться, что файл не используется никаким другим приложением.

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

Вам нужно выяснить почему файл используется - такой инструмент, как FileMon , может помочь выяснить.

...