我有一個用C#編寫的程序,它應該每n個記錄(如500)保存一個zip文件。C#:如何保存每個X文件的zip文件
我的想法是使用mod運算符(%),並且操作的結果爲零,然後寫入文件。這很好,但是:如果我有520條記錄怎麼辦?我應該在第一個zip中寫入500個文件,然後在第二個文件中寫入20個文件。
這裏的代碼:
using (ZipFile zip = new ZipFile())
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Level8;
zip.CompressionMethod = CompressionMethod.Deflate;
int indexrow = 0;
foreach(DataRow row in in_dt.Rows)
{
zip.AddFile(row["Path"].ToString(),"prova123");
if(indexrow % 500 == 0)
{
using (var myZipFile = new FileStream("c:\\tmp\\partial_"+indexrow.ToString()+".zip", FileMode.Create))
{
zip.Save(myZipFile);
}
indexrow = indexrow++;
}
}
}
}
in_dt是包含在文件系統中的所有文件路徑的DataTable。
zip對象是基於dotnetzip庫的對象。
首先,這是行不通的,因爲你的索引將在0和1之間反彈,因爲你在循環中聲明它。其次,你想要做的是,在循環結束時(在它之外),如果indexrow%500!= 0,那麼你知道你有一些掛起的文件,所以保存壓縮文件。另外,我之前沒有使用過dotnetzip,但是我會假設你需要在每次保存後聲明一個新的'ZipFile',因爲它怎麼會知道你已經刪除了所有你稱爲'AddFile'的文件? – dman2306
我不確定我是否理解,但如果我是正確的你想要的是在'indexrow = indexrow ++之後;'檢查類似'if(in_dt.Rows.Count - indexrow <500){//創建第二個zip其餘的文件};' – Pikoh
@Pikoh根本不起作用。如果我有500行,你的if語句將返回真499次。 – dman2306