0

メインディレクトリ「MyMainFolder」とその中にいくつかのサブディレクトリを持つMyFile.zipがあり、そのうちの1つ(MySubFolder)を抽出したい...そのすべてのサブディレクトリとコンテンツ。

「MySubFolder」を抽出できるように、 MyMainFolder に「ステップイン」する方法を見つけようとしています。

探しているフォルダーがzip内のメインフォルダーとして存在する限り、フォルダーを抽出するコードがいくつかあります...そして、メインフォルダーが「MyMainFolder」と呼ばれているかどうかを検出できるため、その中を調べて、 MySubFolder のメインの zip ルートを調べるのではなく、そこから抽出します)。

using (ZipFile zip1 = ZipFile.Read(fileName))
{
    zipFile = ZipFile.Read(@""+fileName);
    var result = zipFile.Any(entry => entry.FileName.Contains("MySubFolder"));

   if (result == false)
   {
            MessageBox.Show("MyMainFolder detected....Extracting from MyMainFolder...");
            // something here that will extract JUST MySubFolder and contents
   } else {
    foreach (var e in selection)
   {             
           var selection = (from e in zip1.Entries where (e.FileName).Contains("NySubfolder") select e)               
           e.Extract(outputDirectory);        
   }
  }
}

これまでのところ、if-else の各部分の中に個別の using を入れようとしました。また、ルート フォルダー名 (この実験では常に「MyMainFolder」になります) を強制しようとした個別の selectionX を作成してみました。 MySubFolder を抽出できると考えて、調べたものの一部になりましたが、それを機能させることもできませんでした。「ファイルを抽出する方法、zipファイルのパスを無視する」の一部を使用するなど、スタックフローなどで見つけた他のいくつかの方法を取り入れようとしましたが、そのメインルートを「スキップ」する方法を見つけようとしました解凍時のフォルダ。(「MySubFolder」(およびコンテンツ)のみを取得し、outputDirectoryに抽出するように(MyMainFolder\MySubFolderではありません...)

どんな助けでも大歓迎です。ありがとう!!

4

1 に答える 1

1

探しているものに出くわすまでコンテンツ全体を列挙することはうまくいきましたが、実験として、別の方法でそれを行うことができないかどうかを確認したかった.

ルート フォルダー内のサブフォルダーの名前を確認できなかったので、解析中に探していたものと一致させ、必要なものだけを抽出し、出力パスを変更するだけでよいと考えました。

using (ZipFile zip1 = ZipFile.Read(fileName))
{
    zipFile = ZipFile.Read(@""+fileName);
    var result = zipFile.Any(entry => entry.FileName.Contains("MySubFolder"));

    if (result == false)
    {
        // something here that will extract JUST MySubFolder and content
        string TestX = Path.GetDirectoryName(e.FileName) ;
        string MyNewPath = outputDirectory+@"\"+TestX ;
        e.Extract(MyNewPath);
    } else {
        foreach (var e in selection)
   {             
        var selection = (from e in zip1.Entries where (e.FileName).Contains("MySubfolder")
        .select e)               
        e.Extract(outputDirectory);        
   }
}

そのようなもの..あまり役に立ちませんが、興味深く、少し学ぶのに役立ちました. (他に何もない場合、物事をしない方法の例..へへ)ありがとう

于 2013-04-06T02:33:26.107 に答える