7Zip解压时如何实现文件夹同步?求非删除文件夹方案
7Zip解压时无法原生同步删除冗余文件,附替代方案
7Zip的解压命令(x或e)没有类似压缩时u -uq0的同步选项,没法在解压过程中自动删掉目标文件夹里没出现在压缩包中的冗余文件。你当前用的代码:
startInfo.Arguments = $"x -y \"{sourcefilePath}\" -o\"{Settings.Default.Local_ProjektPath}{supDirName}\" ";
只能覆盖已存在的文件,但清理不了多余内容。
给你两个可行的替代方案:
方案1:对比压缩包文件列表删除冗余
- 先用7Zip导出压缩包内所有文件的路径:
这条命令会把压缩包里所有文件的路径输出到7z l -slt "{sourcefilePath}" | findstr "Path =" > compressed_files.txtcompressed_files.txt中。 - 在C#里写代码遍历目标文件夹的所有文件,和
compressed_files.txt里的路径做对比,删掉不在列表里的文件。注意要统一路径格式(比如都转成相对路径或者绝对路径),避免匹配出错。
- 先用7Zip导出压缩包内所有文件的路径:
方案2:用robocopy镜像同步(更省心)
先把压缩包解压到临时目录,再用robocopy的镜像同步功能把临时目录的内容同步到目标文件夹,它会自动删除目标里的冗余文件:// 第一步:解压到临时目录 startInfo.Arguments = $"x -y \"{sourcefilePath}\" -o\"{tempDirPath}\""; Process.Start(startInfo).WaitForExit(); // 第二步:用robocopy做镜像同步 var robocopyStartInfo = new ProcessStartInfo("robocopy", $"\"{tempDirPath}\" \"{Settings.Default.Local_ProjektPath}{supDirName}\" /MIR /NFL /NDL"); Process.Start(robocopyStartInfo).WaitForExit(); // 第三步:删除临时目录 Directory.Delete(tempDirPath, true);/MIR参数会让目标文件夹完全复刻临时目录的内容,自动删掉不在临时目录里的文件;/NFL和/NDL是用来关闭文件和目录的日志输出,减少不必要的信息。
内容的提问来源于stack exchange,提问作者Denrie
相关产品推荐
相关产品推荐

