私はオンラインで見ていましたが、私はいくつかのものを見つけることができました。c# - 大きなファイルを複数のファイルに分割
INSERT INTO `cola`(`url`, `page`, `c_id`) VALUES
(`{0}`, `{1}`, 0),
(`{0}`, `{1}`, 0),
(`{0}`, `{1}`, 0), ... 300 times
(`{0}`, `{1}`, 0);
INSERT INTO...
は{0}と{1}の値です:
私はこのようになりますSQLファイルを持っています。 私はphpMyAdminに最大50MiBしかアップロードできないので、このファイルを分割する必要があります。 私は物事をオンラインで見つけましたが、行を終了せずにファイルを50MiBで正確に分割しました。
は、だから私は何をしたいです: スプリット48個のにファイル - 49MiBファイル、および
INSERT INTO `cola`(`url`, `page`, `c_id`) VALUES
で始まる最後の行が(
{0} ,
{1} , 0);
と次のファイルになりましょうどのようなI現在:
StreamReader GET = new StreamReader(@"C:\Users\Matthew\Documents\sql.sql");
string line;
int fileId = 0;
int lineId = 0;
long fileLenght = 0;
while ((line = GET.ReadLine()) != null)
{
lineId++;
using (StreamWriter sw = File.AppendText(@"C:\Users\Matthew\Desktop\ye\" + fileId.ToString() + ".sql")) sw.WriteLine(line);
if (lineId == 50000)
{
FileInfo f = new FileInfo(@"C:\Users\Matthew\Desktop\ye\" + fileId.ToString() + ".sql");
fileLenght = f.Length;
Console.Title = fileLenght.ToString();
lineId = 0;
}
if (fileLenght > 50000000 && line.EndsWith(");"))
{
fileLenght = 0;
fileId++;
using (FileStream fs = File.Create(@"C:\Users\Matthew\Desktop\ye\" + fileId.ToString() + ".sql")) fs.Close();
Console.WriteLine("Created: " + fileId.ToString());
}
}
GET.Close();
Console.WriteLine("Core - SQL is done.");
これは機能しますが、非常に遅いです。どんなアイデアでもそれを速くすることができますか?
分割しているファイルは4GBです。
なぜファイルをINSERT文で分割しないのですか?これはワンオフ作品ですか? – Yahya
@ Yahya各INSERT文で分割すると、あまりにも多くのファイルが取得されます。私は約48/49 MiBのファイルが欲しい。 – wtm
これは、C# – Paparazzi