簡體   English   中英

Ionic Zip:通過添加文件夾提取zip文件

[英]Ionic Zip: Extract zip file with folder addition

我,或者更好,我們有一個大問題! 我們最喜歡的游戲Trove已將其結構更改為可修改的。 現在我們坐在ModLoader上,不知道如何更新它。 它應該保留舊的結構,但是需要將一個文件夾應用於zips根目錄中的每個現有文件夾。 讓我演示給你看:

mod.zip
|-blueprints
| |-fileA
|
|-particles
| |-fileB

必須將其提取到每個Live / blueprints / override / ...和Live / particles / override / ...(這只是一個示例……在實際的mod中,有更多的文件夾和更多的文件)

我怎樣才能做到這一點? Ionic有可能嗎? 還是我必須使用其他圖書館?

當然,如果我了解您的需求,類似的方法應該可以使用。

private const string ZIP_FILE = @"c:\temp\mod.zip";

static void Main()
{
    // delete if already there
    File.Delete(ZIP_FILE);

    // create example zip file
    using(ZipFile zipToPack = new ZipFile(ZIP_FILE))
    {
        File.WriteAllText(@"c:\temp\fileA.txt", "This is file A");
        zipToPack.AddFile(@"c:\temp\fileA.txt", "blueprints");
        File.WriteAllText(@"c:\temp\fileB.txt", "This is file B");
        zipToPack.AddFile(@"c:\temp\fileB.txt", "particles");
        zipToPack.Save();
    }

    // extract inserting extra directory
    string baseExtractDir = @"c:\temp\LIVE";
    string overrideDir = "override";

    using (ZipFile zipToUnpack = new ZipFile(ZIP_FILE))
    {
        // loop through each entry in the zip file
        foreach (var zipEntry in zipToUnpack)
        {                    
            if (zipEntry.IsDirectory) continue;
            string zipDirectoryPath = Path.GetDirectoryName(zipEntry.FileName);
            // create the target file path as follows:
            // ("c:\temp\LIVE") + zip file path ("blueprints") + our extra path ("override") + zip file name ("fileA.txt")
            string targetExtractFile = Path.Combine(baseExtractDir, zipDirectoryPath, overrideDir, Path.GetFileName(zipEntry.FileName));
            // create the directory path if needed
            string targetExtractDir = Path.GetDirectoryName(targetExtractFile);
            if (!Directory.Exists(targetExtractDir)) Directory.CreateDirectory(targetExtractDir);
            // extract the zip file to our target file name
            using (FileStream stream = new FileStream(targetExtractFile, FileMode.Create))
                zipEntry.Extract(stream);
        }
    }

    Console.ReadKey();
}

暫無
暫無

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

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