0

私は現在、このコードを持っています:

     foreach (string file in openFileDialog1.FileNames)
     {
     String ExtractPath = Path.GetDirectoryName(file);   
         try
         {
             using (ZipFile zip = ZipFile.Read(file))
             {
                 zip.ExtractProgress += ExtractProgress;
                 foreach (ZipEntry e in zip)
                 {
                     try
                     {                             
                         e.Extract(ExtractPath,ExtractExistingFileAction.OverwriteSilently);  // true => overwrite existing files
                      }
                      catch
                      {
                      }
                    }
                 }
            }
            catch
            {
            }
       }

これは正常に機能し、選択した 1 つ以上の zip ファイルを同時に抽出します。しかし、ファイルごとに個別のディレクトリを作成し、作成したディレクトリに各ファイルを配置する方法について混乱しています。

例:

ユーザーは、抽出する 2 つの zip ファイルを選択します。2 つの zip ファイルは、「A.zip」および「B.zip」と呼ばれます。

抽出したファイルをプログラムで独自のディレクトリに配置して、さらに使用するためにふるいにかけたいと思います。

したがって、zipファイル「A.zip」が抽出され、抽出されたファイルは「Unzipped A」というフォルダーに配置され、zipファイル「B.zip」が抽出され、抽出されたファイルは「Unzipped」というフォルダーに配置されますB」。

これが紛らわしい場合は申し訳ありません。助けていただければ幸いです。

さて、MatteKarla のスニペットを使用して編集した後、次のようになりました。

            foreach (string file in openFileDialog1.FileNames)
        {
            string directory = Path.GetDirectoryName(file) + @"\Unzipped " + Path.GetFileNameWithoutExtension(file);
            var GetFiles = Directory.GetFiles(directory, "*.txt", SearchOption.AllDirectories).Where(s => s.EndsWith(".txt"));
            foreach (string text in GetFiles)
            {
                MessageBox.Show("Text found", "File");
            }
        }

これは、作成したディレクトリで抽出されたファイルから .txt ファイルを検索し、完全に機能します。これが適切な方法なのか、それとももっと効率的な方法があるのか​​ 疑問に思っていましたか?

4

2 に答える 2

1

Path.GetFileNameWithoutExtension拡張子なしのファイル名を使用すると、 と を使用して拡張子なしのパスとファイル名を結合しPath.Combine、新しいパスを作成できます。

最後に、そのディレクトリを作成してDirectory.CreateDirectory、zipファイルを.zipファイルに抽出しようとしたときにディレクトリが存在するようにしますExtractPath

これにより、すべての zip ファイルが、展開される zip ファイルが存在するディレクトリに展開されます。通常、OpenFileDialog を使用する場合、すべてのファイルは同じディレクトリにあります。

foreach (string file in openFileDialog1.FileNames)
 {
     String ExtractPath = Path.GetDirectoryName(file);   
     string directory = "Unzipped " + Path.GetFileNameWithoutExtension(file);
     ExtractPath = Path.Combine(ExtractPath, directory);
     Directory.CreateDirectory(ExtractPath);

     try
     {string ExtractPath = Path.GetDirectoryName(file);

すべてのファイルを特定のディレクトリに抽出する場合は、ディレクトリを for ループの外側に設定し、そのパスを "Unzipped " + filename と組み合わせます。

String unpackPath = @"C:\UnpackPath";  
foreach (string file in openFileDialog1.FileNames)
 {
     string directory = "Unzipped " + Path.GetFileNameWithoutExtension(file);
     string ExtractPath = Path.Combine(unpackPath, directory);
     Directory.CreateDirectory(ExtractPath);

これにより、「C:\UnpackPath\Unzipped A」、「C:\UnpackPath\Unzipped B」のようなフォルダーにファイルが展開されます (例のファイル名を使用)。

于 2013-09-18T22:02:50.543 に答える
0

.Net を使用できます

Directory.Create("url") ;

そしてまた

Path.GetFileName("url"); // Separates the file name from the path

ディレクトリを作成し、そこに保存する必要があるファイル名を取得します。

たとえば、zipファイル名をディレクトリ+次のような有効なパスに渡すことにより、ディレクトリを動的に作成できます

GetCurrentDirectory () + zipped file name 
于 2013-09-18T21:54:17.143 に答える