我正在尝试将嵌套列表中的字符串导出到用户选择的txt或csv文件中,并且一切似乎都正常工作但是当我实际上在导出文件后检查文件时,文件绝对是空白的。我去了一个单独的测试程序,以模拟我的问题,它在该程序上工作,但当我移动代码时,它仍然不会导出任何东西。
这只是我初始化的嵌套列表,如果需要的话。
List<List<string>> aQuestion = new List<List<string>>();
这是代码的问题区域。
static void writeCSV(List<List<string>> aQuestion, List<char> aAnswer)
{
StreamWriter fOut = null;
string fileName = "";
//export questions
//determine if the file can be found
try
{
Console.Write("Enter the file path for where you would like to export the exam to: ");
fileName = Console.ReadLine();
if (!File.Exists(fileName))
{
throw new FileNotFoundException();
}
}
catch (FileNotFoundException)
{
Console.WriteLine("File {0} cannot be found", fileName);
}
//writes to the file
try
{
fOut = new StreamWriter(fileName, false);
//accesses the nested lists
foreach (var line in aQuestion)
{
foreach (var value in line)
{
fOut.WriteLine(string.Join("\n", value));
}
}
Console.WriteLine("File {0} successfully written", fileName);
}
catch (IOException ioe)
{
Console.WriteLine("File {0} cannot be written {1}", fileName, ioe.Message);
}
所以,如果你们中的任何一个人能帮助我解决这个问题,那将是很好的,因为它看起来像是一个小问题,但我无法理解为我的生活。
答案 0 :(得分:0)
可能会发生缓冲区未刷新到磁盘的情况。您应该处理流编写器,它会将所有内容都推送到磁盘:
using (StreamWriter writer = new StreamWriter(fileName, false)) // <-- this is the change
{
//accesses the nested lists
foreach (var line in aQuestion)
{
foreach (var value in line)
{
writer.WriteLine(string.Join("\n", value));
}
}
}
在更复杂的层面上,通常可以缓冲可能导致性能损失的流。文件流肯定是缓冲的,因为将每个单独的数据立即推送到IO是非常低效的。
当您使用文件流时,可以使用StreamWriter.Flush()
方法显式刷新其内容 - 如果您想调试代码并希望查看编写数据的距离,这非常有用。 / p>
但是,您通常不会自己刷新流,而只是让其内部机制选择最佳时机。相反,您确保处理流对象,这将在关闭流之前强制刷新缓冲区。
答案 1 :(得分:0)
使用这种简单的方法,它更容易,它将负责创建和处理StreamWriter。
File.WriteAllLines(PathToYourFile,aQuestion.SelectMany(x=>x));
有关File.WriteAllLines
Here
另外,在你的代码中你没有处理StreamWrite。将其括在Using
块中。像这样......
using(var writer = new StreamWriter(PathToYourFile,false)
{
//Your code here
}