У меня есть window form
, который содержит две кнопки, позволяющие пользователю выбирать input directory
и output directory
, как показано ниже.Кроме того, у меня есть fileSystemWatcher
для наблюдения за пустой исходной папкой и timer
для использования с функцией zip.Пользователь может выбрать каталог (который содержит некоторую подпапку) и щелкнуть start
, чтобы создать zip-файл, и он может поместить этот zip-файл в любые каталоги по своему выбору.
результат будет таким:
Однако мне не удалось создать ZIP-файл для выбранного каталогапри использовании 7zip ни одно из имен не совпадает с подкаталогом из исходной папки.Ниже приведен мой код для обработки функции zip с использованием 7zip.
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;
}
}