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 が言ったように) が、{} の余分なセットを追加するのは好きではありません (私の好み)
皆さん、ありがとうございました