-1

我刚回到 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 所说),但我不喜欢添加额外的一组 {}(我的口味)

谢谢你们

4

3 回答 3

1

我的问题的解决方案是:

string line, generated;
using(System.IO.StreamReader file = new System.IO.StreamReader("source.txt", System.Text.Encoding.UTF8)){
   using(System.IO.StreamWriter w = new System.IO.StreamWriter("data.sql", false, 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);
       }
    }
}
于 2012-07-11T15:20:16.990 回答
0

确保你FlushStreamWriter“文件关闭的东西”之前。

于 2012-07-10T00:36:21.690 回答
0

您确定要按顺序关闭wfs(即以与打开相反的顺序)吗?

于 2012-07-09T23:38:44.377 回答