ルートディレクトリとは何ですか、またはdotnetzipでディレクトリを設定するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/2675739

  •  28-09-2019
  •  | 
  •  

質問

dotnetzipはどこで保存するためのルートディレクトリを取得しますか。すべての保存例には、ディレクトリが表示されません。

私の目標は、フォルダーとサブフォルダーを再発することです。各フォルダーで、すべてのファイルを1つのzipに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);
        }
    }
役に立ちましたか?

解決

それはに関連する道です 現在の作業ディレクトリ, 、または絶対的なパス。これは基本的にパスの標準手順です。

編集:保存するパスは、ZIP内のディレクトリとは何の関係もありません。また:

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

また

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

正しいこと、つまり、単一のfoo.txtファイルを含む./zip_dir/foo.zipでzipファイルを作成します。もちろん、ZIPでサブディレクトリを作成できますが、それは別の問題です。

他のヒント

少し遅れて、多分私たちは2つの異なるバージョンについて話しているかもしれませんが、それはまだ他の人に役立つかもしれません。

AddFileに2番目の引数を使用して、ファイルがアーカイブに保存されている場所を指定できます。@"\" すべてのファイルがルートに保存されることを意味します。

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

使用しているコンストラクター ZipFile z = new ZipFile(...) zipファイルが保存されている場所であるパスを取ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top