Почему StreamWriter не может записать строки с длиной, меньшей или равной 3, в файлы .csv? - PullRequest
0 голосов
/ 08 июня 2018

_flagImageSources - это строковый массив из 195 файловых путей к .png файлам флагов.Каждый путь к файлу имеет формат C:\Users\user\someFolder\...\Flags\xx.png, где xx - это домен верхнего уровня с кодом страны (например, .uk для Соединенного Королевства).

При выполнении кода в «Фрагменте кода 1»вывод в изначально пустой файл output.csv выглядит так, как показано в «Вывод файла CSV 1»:

Фрагмент кода 1

_streamWriter = new StreamWriter("output.csv");

string str;
string outputText;
for (int i = 0; i < _flagImageSources.Length; i++)
{
  str = _flagImageSources[i];
  outputText = str.Substring(68, 6);
  _streamWriter.WriteLine(outputText);
}

Файл CSVВыходные данные 1

ae.png
af.png
⋮
zw.png

Однако, в момент, когда я уменьшаю длину подстроки с 6 до 3 (или меньше), я получаю выходной результат - пустой файл .csv.

Фрагмент кода 2

_streamWriter = new StreamWriter("output.csv");

string str;
string outputText;
for (int i = 0; i < _flagImageSources.Length; i++)
{
  str = _flagImageSources[i];
  outputText = str.Substring(68, 3);
  _streamWriter.WriteLine(outputText);
}

Вывод файла CSV 2:"пустой файл"

Не понимаю, почемуЯ не могу записать строки длиной 3 (или меньше) в мой файл .csv.Кто-нибудь понимает, почему это и как это можно решить?

1 Ответ

0 голосов
/ 08 июня 2018

Поскольку вы не очищаете выход или неправильно закрываете, а затем утилизируете поток.Вам нужно либо установить AutoFlush на true, либо вручную вызвать .Flush(), а затем .Close() и в конечном итоге .Dispose().

_streamWriter = new StreamWriter("output.csv");

string str;
string outputText;
for (int i = 0; i < _flagImageSources.Length; i++)
{
  str = _flagImageSources[i];
  outputText = str.Substring(68, 3);
  _streamWriter.WriteLine(outputText);
}

_streamWriter.Flush(); 
_streamWriter.Close();
// prev. two lines are redundant b/c dispose will accomplish this.
_streamWriter.Dispose();

Все это произойдет автоматически, если вы используете шаблон Disposable, который является предпочтительным подходом:

using (var sw = new StreamWriter("output.csv"))
{
    for (int i = 0; i < _flagImageSources.Length; i++)
    {
      string str = _flagImageSources[i];
      string outputText = str.Substring(68, 3);
      sw.WriteLine(outputText);
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...