为什么StreamWriter无法写入长度小于或等于3到.csv文件的字符串?

时间:2018-06-08 12:56:36

标签: c# csv streamwriter

_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 :(得分:5)

因为您没有刷新输出或正确关闭然后处理流。您需要将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);
    }   
}