5

10 個のテキスト ファイルを含む zip ファイルがあるとします。以下を使用して、これらのテキスト ファイルを簡単に反復処理できます。

using (ZipArchive archive = ZipFile.OpenRead(zipIn))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        Console.writeLine(entry)
    }
}

ただし、テキスト ファイルがサブディレクトリ内にあるとします。

zip/subdirectory/file1.txt

この場合、上記のコードは、そのフォルダー内のすべてのテキスト ファイルではなく、サブディレクトリ フォルダー (「サブディレクトリ」) のみを出力します。

サブディレクトリ内のファイルもループする簡単な方法はありますか?

4

2 に答える 2

8

あなたのプログラムを再現しました。あなたが行う方法で zip アーカイブを反復処理すると、アーカイブ内の完全なディレクトリ構造内のすべてのファイルのリストが取得されます。したがって、再帰は必要ありません。現在行っているように反復するだけです。

API ではファイルとフォルダーが区別されないため、ご迷惑をおかけして申し訳ありません。役立つ拡張メソッドを次に示します。

static class ZipArchiveEntryExtensions
{
    public static bool IsFolder(this ZipArchiveEntry entry)
    {
        return entry.FullName.EndsWith("/");
    }
} 

次に、次のことができます。

using (var archive = ZipFile.OpenRead("bla.zip"))
{
    foreach (var s in archive.Entries)
    {
        if (s.IsFolder())
        {
            // do something special
        }

    }
 }
于 2013-07-10T09:30:48.620 に答える