我刚回到 c# 为我的一个项目创建一个 csv 到 sql 的翻译器。但是我遇到了一个奇怪的行为,我的谷歌搜索不成功,所以我需要你的帮助。
这是以下代码(为这个场合整理的,不要我的质量差,我不是 csharp 专家)
string line, generated;
System.IO.FileStream fs = new System.IO.FileStream("data.sql", System.IO.FileMode.Create);
System.IO.StreamWriter w = new System.IO.StreamWriter(fs, Encoding.UTF8);
System.IO.StreamReader file = new System.IO.StreamReader("source.txt", System.Text.Encoding.UTF8);
while ((line = file.ReadLine()) != null)
{
String[] ar = line.Split('|');
generated = "INSERT INTO `translation` VALUES('" + ar[0] + "'," + ar[1] + ");";
w.WriteLine(generated);
}
// Closing file stuff
文件创建成功,小文件大大生成。但是,当我在大文件上使用它时,结果文件被截断(总是在同一个地方,结果文件为 950ko~)
结果是这样的
INSERT INTO `translation` VALUES ( 'trans1', 1 );
INSERT INTO `translation` VALUES ( 'trans2', 2 );
INSERT INTO `translation` VALUES ( 'trans3', 3 );
INSERT INTO `tran
我错过了 6 行。所以如果有人有想法,我会很乐意热切地听
PS:我可以通过分块我的源文件来轻松解决这个问题,但是我真的很好奇这个问题并且不能认为这是一个.Net问题,我一定做错了什么。
问候所有
结束的东西
w.Close();
file.Close();
fs.Close();
编辑:解决方案根据人们的建议,我的问题的解决方案如下
// Replacing my FileStream and StreamWriter by the following line
System.IO.StreamWriter w = new System.IO.StreamWriter("data.sql", false, System.Text.Encoding.UTF8);
// Removing the fs.Close()
它现在就像一个魅力。我可以通过使用'using'关键字来避免调用 Close 函数(如 Mehrdad 所说),但我不喜欢添加额外的一组 {}(我的口味)
谢谢你们