Frage

Dabei ist DotNetZip es Stammverzeichnis erhalten für das Speichern. das Speichern Beispiele Alle zeigen nicht das Verzeichnis.

Mein Ziel ist es, einen Ordner und Unterordner rekursiv. In jedem Ordner möchte ich alle Dateien in einem Zip-und löschen Sie die Quelldateien zip.

    private void CopyFolder(string srcPath, string dstPath)
    {
        if (!Directory.Exists(dstPath))
            Directory.CreateDirectory(dstPath);
        string[] files = Directory.GetFiles(srcPath);
        string msg;
        string zipFileName;
        using (ZipFile z = new ZipFile(Path.Combine(srcPath,String.Format("Archive{0:yyyyMMdd}.zip", DateTime.Now))))
        {
            z.ReadProgress += new EventHandler<ReadProgressEventArgs>(z_ReadProgress);
            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(file);
                AddLog(String.Format("Adding {0}", file));
                z.AddFile(file);

            }
            //z.Save(Path.Combine(srcPath, String.Format("Archive{0:yyyyMMdd}.zip", DateTime.Now)));
            z.Save();
            if (deleteSource)
            {
                foreach (string file in files)
                {
                    File.Delete(file);
                }
            }

            zipFileName = z.Name;
        }
        if (!compressOnly)
            File.Copy(Path.Combine(srcPath,zipFileName), Path.Combine(dstPath, Path.GetFileName(zipFileName)));
        string[] folders = Directory.GetDirectories(sourcePath);
        foreach (string folder in folders)
        {
            string name = Path.GetFileName(folder);
            string dest = Path.Combine(dstPath, name);
            Console.WriteLine(ln);
            log.Add(ln);
            msg = String.Format("{3}{4}Start Copy: {0}{4}Directory: {1}{4}To: {2}", DateTime.Now.ToString("G"), name, dest, ln, Environment.NewLine);
            AddLog(msg);
            if (recurseFolders)
                CopyFolder(folder, dest);
            msg = String.Format("Copied Directory: {0}{4}To: {1}\nAt: {2}{3}", folder, dest, DateTime.Now.ToString("G"), Environment.NewLine);
            AddLog(msg);
        }
    }
War es hilfreich?

Lösung

Es ist ein Pfad relativ zum aktuellen Arbeitsverzeichnis oder einen absoluten Pfad. Dies ist im Grunde Standardverfahren für Pfade.

EDIT: Der Pfad, den Sie zu speichern, hat nichts mit Verzeichnissen innerhalb der zip zu tun. Entweder:

using(ZipFile f = new ZipFile("zip_dir/foo.zip"))
{
       f.AddFile("foo.txt");
       f.Save();
}

oder

using(ZipFile f = new ZipFile())
{
        f.AddFile("foo.txt");
        f.Save("zip_dir/foo.zip");
}

hat die richtige Sache, nämlich eine Zip-Datei auf ./zip_dir/foo.zip erstellen eine einzelne foo.txt Datei enthält. Natürlich können Sie Unterverzeichnisse im zip erstellen, aber es ist ein anderes Thema.

Andere Tipps

Ein wenig zu spät und vielleicht sind wir über zwei verschiedene Versionen zu sprechen, aber es könnte noch eine Hilfe für andere sein.

Sie können festlegen, wo die Dateien im Archiv gespeichert werden, indem das zweite Argument AddFile verwenden. @"\" bedeutet, dass alle Dateien im root gespeichert werden.

z.AddFile(file,@"\");

Der Konstruktor Sie ZipFile z = new ZipFile(...) verwenden nimmt einen Weg, der die Lage ist die Zip-Datei gespeichert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top