SharpZipLib圧縮ファイル、圧縮されたフォルダを作成し、パス(経路長圧縮解決SharpZipLib表示問題)を指定する使用のC#

プロジェクトで使用SharpZipLibはフォルダは、深いディレクトリに遭遇した場合、同じフォルダ内のファイルが深い問題を圧縮されたときに圧縮されます。たとえば、現在のディレクトリのプログラムフォルダに圧縮ファイル(D:\ CX \コード\プログラム\ binに\デバッグ\ファイル)、 その後、圧縮された生成パッケージ、CXへのオープンアクセスに必要\コード\プログラム\ binに\デバッグ\ファイルあなたは内容を見ることができます。実践を通して、変装は、カスタムアーカイブディレクトリ名と機能のディレクトリの深さを実装しました。コードと以下の説明。

まず、私は次のように分散圧縮フォルダやファイルパスにしたいです:

フォルダ:D:\ CX \コード\プログラム\ binに\デバッグ\ファイル\ Upload1

2フォルダ:D:\ CX \コード\プログラム\ binに\デバッグ\ファイル\ Upload2

フォルダ3:D:\ CX \コード\プログラム\ binに\デバッグ\画像\ 00001

第二に、圧縮されたディレクトリ形式を生成する必要があります:

保管ファイル

       Upload1

             ......ファイルfile1

       Upload2

            ......ファイルfile1

       00001

            ......ファイルfile1

第三に、メインの実装コード

FastZipを通じて圧縮フォルダやコンテンツを追加するには、FastZipない横断するためにコンテンツを追加ZIPファイル経由のパスを追加して、パスのパケット圧縮を指定します。

1、FastZipは一度追加Upload1とUpload2ディレクトリ(タリアファイルは下位クラスレベルのディレクトリに属しています)

var fastZip = new FastZip
{
    Password = "ZipPassword",
    CreateEmptyDirectories = true
};
//注意路径最后不要带\ filepath为压缩包路径(如 d:\1.zip) 这里第三个参数为true代表遍历当前目录下的所有目录,第四个参数为过滤文件类型
fastZip.CreateZip(filePath, @"D:\cx\code\program\bin\debug\files", true, "json");

2、ZIPファイル、圧縮ファイルにアクセスするステップによって生成されたパケット内のパス、および指定された圧縮ファイルを更新します

using (var zipFile = new ZipFile(filePath))
{
    zipFile.BeginUpdate();
    var picList = FilesHelper.FileSearchAsync(dirPicPath, "*.*", SearchOption.AllDirectories,
        x => x.Length > 10);
    foreach (var s in picList)
    {
//指定新添加的文件在压缩包内的目录路径
        zipFile.Add(s, $@"00001\{new FileInfo(s).Name}");
    }
    zipFile.CommitUpdate();
}

これは、パス指定された圧縮されたパッケージのアーカイブファイルを作成します。

フィルターはのawait検索できるフォルダ上に指定されたファイルタイプコードフォルダ指定アタッチ

/// <summary>
/// 检索指定目录下的文件
/// </summary>
/// <param name="directoryPath">检索目录路径</param>
/// <param name="searchFilter">检索文件类型(如*.mp4)</param>
/// <param name="option">检索选项</param>
/// <param name="func">文件过滤器(比如只需要.mp4的文件)</param>
/// <returns></returns>
public static async Task<string[]> FileSearchAsync(string directoryPath, string searchFilter, SearchOption option, Func<string, bool> func)
{
    var files = Task.Run(() => Directory.GetFiles(directoryPath, searchFilter, option).Where(func).ToArray());
    var s = await files;
    return s;
}

 

发布了85 篇原创文章 · 获赞 31 · 访问量 26万+

おすすめ

転載: blog.csdn.net/5653325/article/details/95179116