2012-10-16 3 views
0

Возможный дубликат:
How to both Read/Write File in C#C# Чтение и запись из и в тот же файл

Я хочу писать и читать текст, и из того же текстового файла. Вот код

TextWriter notesWriter = new StreamWriter("text.txt"); 
TextReader notesReader; = new StreamReader("text.txt"); 

После того, как файл открыт для записи, он блокируется и предотвращает его чтение. Так, некоторые исключения, как,

Процесс не может получить доступ к файлу «text.txt», так как он используется другим процессом.

Какое обходное решение для этого? Спасибо.

EDIT: Предположим, если вы хотите поменять текст в текстовом поле и сохранить его в файле и прочитать его, когда требуется установить текст в текстовое поле.

+4

Не читайте и не пишите в одно и то же время? –

+1

Что вы пытаетесь сделать? Можете ли вы не прочитать файл и написать ему после этого (после того, как вы закончите чтение)? – Msonic

+0

Нет ничего плохого в написании файла и его закрытии, а затем при открытии и чтении. –

ответ

0

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

+0

'' если вам не нужно писать и читать в то же время, что невозможно "' Нет, это не так. – Servy

+0

Yup, просто красное будущее и отредактированное перед вашим комментарием (я знал, что это произойдет :)) – Gabber

+0

нить будет закрыта через минуту – Servy

0

Try что-то вроде

using(TextWriter notesWriter = new StreamWriter("text.txt")) 
{ 
//do write-things here 
} 

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

0

Обходное решение не для этого. Хотя технически это можно сделать, способ, которым вы хотите это сделать (путем доступа к файлу с использованием потока семантики), почти невозможно, так как, даже если вы исправляете совместное использование файлов, это означает, что вы читаете тот же материал, который вы написали в бесконечном цикле.

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

Наиболее вероятным вариантом является то, что вы хотите записать в другой файл, (модифицированную?) Копию исходного файла, а затем поменять копию на исходный файл.

0

Конечно, вы можете читать и писать в то же самое время, но вам нужно всего лишь одна ссылка:

Stream l_fileStream = File.Open("text.txt", FileMode.Open, FileAccess.ReadWrite); 

http://msdn.microsoft.com/en-us/library/s67691sb.aspx

Теперь вы можете читать/записывать в файл:

StreamReader l_reader = new StreamReader(l_fileStream); 
StreamWriter l_writer = new StreamWriter(l_fileStream); 

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

0

Вам не нужно читать и писать в одно и то же время, учитывая ваши изменения.

  • Откройте приложение
  • Прочитайте файл. Поместите содержимое файла в текстовое поле. Закрыть файл
  • Сохраните содержимое текстового поля в файл. Закройте файл.

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

Смежные вопросы