Я много читал об использовании Streamwriter. По крайней мере, у меня есть решение, которое почти работает, но в некоторых файлах последняя строка добавляется дважды. Я попытался вставить Flush() в конце записи и даже после каждого оператора if, но поведение остается прежним. Может, кто-то знает ответ и может мне помочь?C# с использованием Streamwriter: последний «буфер» добавляется дважды, используя Flush()
Использование: я извлекаю информацию из другого файла и сохраняю ее в объекте (вся информация хранится правильно - я протестировал это). После этого я вызвать метод для записи информации, хранящейся в объекте в файле:
for (int i = 0; i < allCMs.Count; i++)
{
using (var stream = File.Open(allCMs[i].dir,
FileMode.OpenOrCreate, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine(version);
writer.WriteLine();
if (allCMs[i].name != null)
{
writer.WriteLine(addProject(allCMs[i].name));
writer.WriteLine();
writer.Flush();
}
if (allCMs[i].header != null)
{
writer.WriteLine(addHeader(allCMs[i].header));
writer.WriteLine();
writer.Flush();
}
if (allCMs[i].src != null)
{
writer.WriteLine(addSrc(allCMs[i].src));
writer.WriteLine();
writer.Flush();
}
}
}
}
Выход в TXT подобен следующему:
project: projectname
header: header
src: source
src: source
, а иногда, как это:
project: projectname
header: header
src: source
: source
(я упростил файлы для понимания)
Можете ли вы предоставить короткий, но полный пример, демонстрирующий эту проблему? Я сильно подозреваю, что проблема заключается в том, что вы перезаписываете существующий (более длинный) файл и вам просто нужно изменить 'FileMode.OpenOrCreate' на' FileMode.Truncate' или просто вызвать 'File.CreateText' вместо этого. –
'FileMode.Truncate' выполнил эту работу. Интересно, почему, потому что я также пытался удалить все файлы вручную до и проверять, что каждый файл открывается только один раз, но он работает, поэтому большое вам спасибо :-) – user2550641
@Jon Skeet, очень полезно. Спасибо. – Elvis