c# - 更改扩展名、提取、删除 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....");
}
解决方案
问题是在您实际创建重命名的 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....");
}
推荐阅读
- css - 如何在 2 列中动态构建内容
- php - Angular 和 PHP 服务器在同一个端口
- android - 无法使用 adb 重新安装拆分的 APK
- sql-server - 使用 powershell 导出 SQL 查询输出
- r - 无法在 rStudio 上加载 rJava
- search - 是否可以将来自 solr 的子文档集成到胡萝卜工作台中?
- flutter - Appsflyer 如何记录日志事件
- python - 如何使用 python SDK 重启 docker 服务
- go - 如何在运行 go mod 下载时强制使用特定的包版本?
- java - NumberFormatExeption 使用 BufferedReader 处理双打时