2010-07-20 13 views
3

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

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

Что будет лучше всего в моем сценарии? Я оценил бы некоторый код snipplets тоже ..

Благодаря

ответ

6

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

Вместо использования контекстного подхода 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 и перегрузите его конструктор, и вы сможете точно настроить, как он себя ведет в соответствии с вашими задачами.

+0

Ваш второй блок кода говорит 'FileShare.Read', а не' FileShare.Write' –

+0

@Matt Ellen. Исправлено - спасибо. –

1

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

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

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