首页 > 解决方案 > 更改扩展名、提取、删除 zip、合并新文件夹

问题描述

我有一个独特的文件扩展名,它实际上只是一个 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....");
}

标签: c#zipfile-copying

解决方案


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

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

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

如果您的最终目标只是创建一个包含 *.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....");
}

推荐阅读