-1

C# に戻って、自分のプロジェクトの 1 つに 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

「ファイルを閉じるもの」Flushの前に確認してください。StreamWriter

于 2012-07-10T00:36:21.690 に答える
0

wと の両方をfsその順序で (つまり、開いたときとは逆の順序で)閉じていますか?

于 2012-07-09T23:38:44.377 に答える