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

Why does the StreamWriter fail to write strings of a length less than or equal to 3 to .csv files?

_flagImageSources 是一个包含 195 个文件路径的字符串数组,指向 .png 个标志文件。 每个文件路径的格式为 C:\Users\user\someFolder\...\Flags\xx.png,其中 xx 是国家代码顶级域名(例如 .uk 代表英国)。

执行 "Code Snippet 1" 中的代码时,最初为空 output.csv 文件的输出如 "CSV File Output 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: "an empty file"

我不明白为什么我不能将长度为 3(或更少)的字符串写入我的 .csv 文件。有谁知道这是为什么以及如何解决?

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