Здравствуйте.
Нужен ответ на такой вопрос:
Как писат в файл в C#:
Использую класс StreamReader/StreamWriter, но мне необходимо писать в один файл, потом читать из него, потом опять писать в него, но Я не знаю сколько раз это будет продолжаться, не знаю как правильно организовать смену режима чтения на запись и обратно...
Может нужно закрывать файл и переоткрывать для чтения и т.д.
но как это делать не имею представления...
Помогите пожалуйста.
Здравствуйте, bulatik, Вы писали:
B>Здравствуйте. B>Нужен ответ на такой вопрос: B>Как писат в файл в C#: B>Использую класс StreamReader/StreamWriter, но мне необходимо писать в один файл, потом читать из него, потом опять писать в него
Здравствуйте, bulatik, Вы писали:
B>Нужен ответ на такой вопрос: B>Как писат в файл в C#: B>Использую класс StreamReader/StreamWriter, но мне необходимо писать в один файл, потом читать из него, потом опять писать в него, но Я не знаю сколько раз это будет продолжаться, не знаю как правильно организовать смену режима чтения на запись и обратно... B>Может нужно закрывать файл и переоткрывать для чтения и т.д.
Правильный ответ по большей части будет зависить от поставленной задачи. Если действительно нужно писать и читать из файла вперемешку, то открывать и закрывать его непереставая — удовольствия никакого. В таком случае надо использовать конструктор класса FileStream с параметром FileShare:
string fname = @"c:\temp\temp.txt";
using (StreamWriter sw = new StreamWriter(
new FileStream(fname, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read)))
using (StreamReader sr = new StreamReader(
new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Write)))
{
sw.WriteLine("This is a test...line #1.");
sw.Flush();
Console.WriteLine(sr.ReadLine());
sw.WriteLine("This is a test...line #2.");
sw.WriteLine("This is a test...line #3.");
sw.Flush();
Console.WriteLine(sr.ReadToEnd());
}
Конечно, если в файл данные пишутся и читаются из множества потоков, то следует позаботиться о должной синхронизации.
Какой смысл одновременно читать и писать в текстовый файл? Если файл бинарный, то его можно как-то поделить на области и заниматься их блокировкой, а затем чтением или записью. Но текстовый файл вещь принципиально потоковая. Или у вас все строки одинаковой длинны?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
B>Использую класс StreamReader/StreamWriter, но мне необходимо писать в один файл, потом читать из него, потом опять писать в него, но Я не знаю сколько раз это будет продолжаться, не знаю как правильно организовать смену режима чтения на запись и обратно
А большой файл вообще? Может, его считать в какую-то структуру данных в памяти, и там потом с этим фаршем в памяти и работать до победного конца, а в конце обратно в файл скинуть? А то так очень уж некрасиво получается.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, bulatik, Вы писали:
VD>Какой смысл одновременно читать и писать в текстовый файл? Если файл бинарный, то его можно как-то поделить на области и заниматься их блокировкой, а затем чтением или записью. Но текстовый файл вещь принципиально потоковая. Или у вас все строки одинаковой длинны?
СТОП: Читать и писать в файлы умею Но вопрос. А как можно заблокировать часть файла? Ты что имел ввиду? Одним процессом заблокировать часть файла, и другой процесс сможет считать только незаблокированную часть файла? Или я, сунув нос в эту ветку, услышал звон не там? Если такое возможно, то никогда об этом не слышал... ткните меня носом в MSDN. Спасибо!
Здравствуйте, Whistler, Вы писали:
W>СТОП: Читать и писать в файлы умею Но вопрос. А как можно заблокировать часть файла?
Еще раз по буквам. Текстовый файл по своей сути сущьность потоковая. Так что не как! Если нужно блокировать части файла, то нужно читать его как бинарный поток.
W> Ты что имел ввиду? Одним процессом заблокировать часть файла, и другой процесс сможет считать только незаблокированную часть файла?
Для чтения блокировка не нужна. Вернее нужна, разделяемая. А вот если кто-то параллельно пишет, то без блокировки не обойтись. Иначе такие глюки будут...
W> Или я, сунув нос в эту ветку, услышал звон не там? Если такое возможно, то никогда об этом не слышал... ткните меня носом в MSDN. Спасибо!