2015-03-30 34 views
0

我們有大量日誌(共117個日誌,總共大約17GB數據)。這是直接的文字,所以我知道它會壓縮得很好。我不是在尋找很好的壓縮率或速度(但這會是一個很好的獎勵)。我目前所做的是獲取要讀取的日誌文件列表(它們在文件名中有一個日期標記,所以我首先進行過濾)。之後我得到的名單我然後使用File.ReadAllLines()讀取每個文件,但我們也篩選上...在讀取之前壓縮大型日誌文件

private void GetBulkUpdateItems(List<string> allLines, Regex updatedRowsRegEx) 
{ 
    foreach (var file in this) 
     allLines.AddRange(File.ReadAllLines(file).Where(x => updatedRowsRegEx.IsMatch(x))); 

    allLines.Sort(); 
} 

從網絡讀取5個文件需要約22秒。我想要做的是將文件列表壓縮成一個zip文件。在本地複製壓縮文件,然後解壓縮並完成其餘的操作。問題是我無法弄清楚如何開始。由於我使用.net 4.5,我第一次嘗試System.IO.Compression.ZipFile,但它想要一個目錄,我不想要所有117個文件。我看到有人使用網絡流和7zip這聽起來很有希望,並且我相當確定7zip安裝在服務器上我需要日誌(可能不重要,因爲我們使用UNC路徑)。所以我卡住了。有什麼建議麼?

+2

您可以嘗試ZipFileExtensions.CreateEntryFromFile。詳細信息可在這裏https://msdn.microsoft.com/en-us/library/hh485724%28v=vs.110%29.aspx – 2015-03-30 20:39:56

+0

@PraveenPaulose我給你什麼建議一槍。它似乎對一個17兆的日誌文件工作正常,但後來我嘗試了最大的文件(670mb),並通過內存不足的例外。談到了一些,我認爲我們要做的是用一個已經運行在同一臺服務器上的不同程序壓縮日誌。然後,這個程序可以複製壓縮文件,並從它們中完成它需要做的事情。 – 2015-03-31 14:57:37

+1

如果這是一個選項,你可以做到這一點。將節省編碼時間和精力:) – 2015-03-31 15:33:21

回答

0

ZipArchiveZipFile的基礎類,允許更細化的操作。從文章中加入硬編碼的文本

樣品:

using (FileStream zipToOpen = new FileStream(
      @"c:\users\exampleuser\release.zip", FileMode.Open)) 
{ 
    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) 
    { 
     ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt"); 
     using (StreamWriter writer = new StreamWriter(readmeEntry.Open())) 
     { 
       writer.WriteLine("Information about this package."); 
       writer.WriteLine("========================"); 
     } 
    } 
} 

由於Praveen Paulose建議您可以使用ZipFileExtensions.CreateEntryFromFile創建從文件條目添加到檔案文件。

+0

看到我上面的評論。基本上這個解決方案不起作用,因爲我的內存非常大,文件耗盡。我可以花時間緩衝它,並將其分成更小的塊......或者我們的解決方案是使用已經部署在服務器上的程序來存檔日誌。 – 2015-03-31 14:59:03

+0

@RobertSnyder我有點驚訝,ZipArchive和Stream.CopyTo使用了很多內存(但我沒有試圖自己打包大文件,所以很可能發生)。事實上,使用基本的'Process.Start'和傳遞文件列表來運行外部程序會更簡單,以壓縮到您使用的程序。 – 2015-03-31 16:57:38

+0

我甚至不需要使用進程啓動。該程序是一個計劃任務,它檢查文件的「最後寫入時間」。如果它是x天,那麼它清除它。清除包括將文件壓縮爲zip,然後刪除原始文件。文件名中有一個日期標記,所以我只是根據它來過濾文件。 – 2015-03-31 17:23:36