更改扩展名、提取、删除 zip、合并新文件夹

Changing extension, extract, delete zip, merge new folder

我有一个独特的文件扩展名,实际上只是一个 zip。我试图在一个事件中更改扩展名,提取文件,然后将它们全部合并到一个文件中。

我可以移动文件,更改扩展名,但它就停在那里了。它不会提取文件。我试图在思考中加入 Thread.Sleep(10000) 可能它没有看到拉链,因为它们仍在复制,但这也不起作用。

string path = txtField.text;
string[] originalFiles = Directory.GetFiles(path, "*.unique");
string[] newZips = Directory.GetFiles(path, "*.zip");
try
{
    foreach (var item in originalFiles)
    {
        File.Copy(item, Path.ChangeExtension(item, ".zip"));
    }
    foreach (var item in newZips)
    {
        ZipFile.CreateFromDirectory(path, item);
        Zipfile.ExtractToDirectory(item, path);
    }
}
catch (exception ex)
{
    MessageBox.Show(ex.Message, "Fail....");
}

问题是在您实际创建重命名的 zip 文件之前设置了 newZips。您需要移动行:

string[] newZips = Directory.GetFiles(path, "*.zip");

..所以它出现在第一个 foreach 循环之后。

如果您的最终 objective 只是用 *.unique 文件的内容创建一个新的 zip,也许您可​​以避免重命名这些文件。您可以执行类似于以下操作的操作,将文件提取到临时文件夹并从这些文件创建新的 zip:

string path = txtField.text;
string[] originalFiles = Directory.GetFiles(path, "*.unique");

try
{
    var extractedFilesPath = Path.Combine(path, "ExtractedFiles");
    var newZipFile = Path.Combine(path, "NewZipFile.zip");

    foreach (var item in originalFiles)
    {
        ZipFile.ExtractToDirectory(item, extractedFilesPath);
    }

    ZipFile.CreateFromDirectory(extractedFilesPath, newZipFile);

    Directory.Delete(extractedFilesPath, true);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Fail....");
}