Ich habe ein ZIP-Archiv und die Ordnerstruktur innerhalb eines Archivs sieht ungefähr so aus:C# - extrahieren bestimmten Verzeichnis aus ZIP, Ordnerstruktur zu bewahren
+ dirA
- fileA.txt
+ dirB
- fileB.txt
Ich versuche, den Inhalt von dirA
zu extrahieren Scheibe, aber während dies zu tun, ich bin nicht in der Lage, die Ordnerstruktur, und statt
- fileA.txt
+ dirB
- fileB.txt
I
- fileA.txt
- fileB.txt
bekommen perserve
Hier ist mein Code:
using (ZipArchive archive = ZipFile.OpenRead(archivePath)) // archivePath is path to the zip archive
{
// get the root directory
var root = archive.Entries[0]?.FullName;
if (root == null) {
// quit in a nice way
}
var result = from curr in archive.Entries
where Path.GetDirectoryName(curr.FullName) != root
where !string.IsNullOrEmpty(curr.Name)
select curr;
foreach (ZipArchiveEntry entry in result)
{
string path = Path.Combine(extractPath, entry.Name); // extractPath is somwhere on the disk
entry.ExtractToFile(path);
}
}
ich ziemlich sicher bin, das ist, weil ich entry.Name
statt entry.FullName
in Path.Combine()
verwenden, aber wenn ich FullName
verwenden wäre, würde ich in Weg, die Root-Verzeichnis dirA
Ich habe bin versuchen, nicht zu extrahieren. Also habe ich eine Mauer hier treffen, und die einzige Lösung, die ich denken kann, ist die gesamte ZIP-Extraktion mit:
ZipFile.ExtractToDirectory(archivePath, extractPath);
... und dann von dirA
an einen anderen Ort die Unterordner Verschieben und Löschen von dirA
. Was nicht wie die glücklichsten Ideen aussieht.
Jede Hilfe wird sehr geschätzt.
Warum, das ist eine große Abhilfe und es scheint jetzt so klar auf der Hand! Vielen Dank. – nn2202