ルートディレクトリとは何ですか、またはdotnetzipでディレクトリを設定するにはどうすればよいですか
質問
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ファイルが保存されている場所であるパスを取ります。
所属していません StackOverflow