_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
文件。有谁知道为什么会这样,以及如何解决它?
答案 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);
}
}