Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 950ko后文件写入未成功_C# - Fatal编程技术网

C# 950ko后文件写入未成功

C# 950ko后文件写入未成功,c#,C#,我刚回到c#为我的一个项目创建一个csv到sql转换器。 然而,我遇到了一个奇怪的行为,我的谷歌搜索没有成功,所以我需要你的帮助 下面是下面的代码(在这种情况下很有用,不要担心质量太差,我不是csharp专家) 该文件已成功创建,并为小文件生成了大量文件。但是,当我在大文件上使用它时,结果文件被截断(总是在同一个位置,结果文件为950ko~) 结果是这样的 INSERT INTO `translation` VALUES ( 'trans1', 1 ); INSERT INTO `transla

我刚回到c#为我的一个项目创建一个csv到sql转换器。 然而,我遇到了一个奇怪的行为,我的谷歌搜索没有成功,所以我需要你的帮助

下面是下面的代码(在这种情况下很有用,不要担心质量太差,我不是csharp专家)

该文件已成功创建,并为小文件生成了大量文件。但是,当我在大文件上使用它时,结果文件被截断(总是在同一个位置,结果文件为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所说),从而更简洁,但我不喜欢添加额外的{}(我的口味)


谢谢大家

您确定要按顺序(即与打开顺序相反)关闭
w
fs
吗?

确保在“文件关闭”之前清除
StreamWriter

我问题的解决方案是:

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);
       }
    }
}

您可以演示如何“关闭文件内容”吗?我想您可能忘了调用,好像您没有调用Flush…当您首先调用fs.close()时,会出现这种行为,从而阻止StreamWriter自行刷新。我猜你的最后一个片段不准确。您根本不应该使用FileStream,只要StreamWriter足够,您就不需要
Flush
,如果您按顺序操作,因为
Close
Flush
。无论如何,正如Hans指出的那样,您不应该使用
FileStream
,而应该使用
using(StreamWriter sw=…){
而不是显式关闭。此代码假设您信任
source.txt
文件。将SQL脚本插入数据库是一种简单的方法。请确保此文件的正确性,并添加一些与ar[]格式相关的检查vlauesI正在提供'source.txt'文件,因此SQLi不是,issue=)。但是我同意如果source.txt是从外部资源生成的,我会测试读取值。
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);
       }
    }
}