簡體   English   中英

讀取前先壓縮大日志文件

[英]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路徑)。 所以我被卡住了。 有什么建議么?

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從文件創建條目以添加到存檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM