为什么 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);
}
}
_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);
}
}