2015-07-10 10 views
1

Я много читал об использовании 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 

(я упростил файлы для понимания)

+0

Можете ли вы предоставить короткий, но полный пример, демонстрирующий эту проблему? Я сильно подозреваю, что проблема заключается в том, что вы перезаписываете существующий (более длинный) файл и вам просто нужно изменить 'FileMode.OpenOrCreate' на' FileMode.Truncate' или просто вызвать 'File.CreateText' вместо этого. –

+0

'FileMode.Truncate' выполнил эту работу. Интересно, почему, потому что я также пытался удалить все файлы вручную до и проверять, что каждый файл открывается только один раз, но он работает, поэтому большое вам спасибо :-) – user2550641

+0

@Jon Skeet, очень полезно. Спасибо. – Elvis

ответ

1

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

Remove all previous text before writing

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

  • Нет связанных вопросов^_^