【发布时间】:2018-12-04 13:06:09
【问题描述】:
我有一个window form,它包含两个按钮,让用户选择input directory 和output directory,如下所示。另外,我有一个fileSystemWatcher 来监视空的源文件夹和timer 与zip 功能一起使用。用户可以选择一个目录(其中包含一些子文件夹)并单击start 以创建一个 zip 文件,他们可以将该 zip 文件放到他们喜欢的任何目录中。
结果会是这样的
但是,我未能使用 7zip 将 zip 文件创建到所选目录,命名与源文件夹中的子目录都不匹配。下面是我使用 7zip 处理 zip 函数的代码。
string source = textBoxInput.Text + "\\*";
string[] files = Directory.GetFiles(textBoxInput.Text, "*.7z", SearchOption.AllDirectories);
string target = tBoxOutput.Text + "\\everySingleZipFile"; // the target location only contains zip file from the source location
foreach (var file in files)
{
// process zip for every file, no idea how to implement it.
_sevenZip.CreateZipFile(source, target);
}
这是我的 7z 方法
public void CreateZipFile(string sourceName, string targetName)
{
ProcessStartInfo zipProcess = new ProcessStartInfo();
zipProcess.FileName = @"E:\Program Files\7-Zip\7z.exe"; // select the 7zip program to start
zipProcess.Arguments = "a -t7z \"" + targetName + "\" \"" + sourceName + "\" -mx=9";
zipProcess.WindowStyle = ProcessWindowStyle.Minimized;
Process zip = Process.Start(zipProcess);
zip.WaitForExit();
}
这是供用户选择放置 zip 文件的目录的按钮。
private void btnOutput_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = $"Choose an output path";
if (fbd.ShowDialog() == DialogResult.OK)
{
// show the path in the text box
tBoxOutput.Text = fbd.SelectedPath;
}
}
【问题讨论】:
-
当您说“输出”时,您的意思是提取?
-
输出目录?那么输出文件名呢?因为 .7z 是文件而不是目录
-
@Patty_Putty 所以你有一个现有的 zip 文件并且你想移动它?或者您有一个现有文件夹,并且您想将其归档到特定位置?
-
这只会添加一个简单的 for-each 循环并将输入文件夹从 c:/path/path/folder 编辑到 c:/path/path/folder/subfolder1 你可以很容易地得到它for-each 循环,看看这个:stackoverflow.com/a/10668520/9615185
-
那么输出文本框有什么用呢?并且 zip 文件位于桌面上,因为这是您选择的。如果您使用我的代码,输出文件应该是您在 FolderBrowserDialog 中选择的任何位置。
标签: winforms textbox filepath 7zip filesystemwatcher