[英]Compress large log file before reading
我們有大量的日志(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文件中。 將zip文件復制到本地,然后將其解壓縮並執行其余操作。 問題是我不知道如何開始。 由於我使用的是.net 4.5,因此我首先嘗試了System.IO.Compression.ZipFile
但是它需要一個Directory,而我並不需要全部117個文件。 我看到有人使用聽起來不錯的網絡流和7zip,而且我相當確定我需要從中獲取日志的服務器上已經安裝了7zip(可能並不重要,因為我們使用UNC路徑)。 所以我被卡住了。 有什么建議么?
ZipArchive是ZipFile
的基礎類,並允許更精細的操作。
從文章中添加硬編碼文本的示例:
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從文件創建條目以添加到存檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.