Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的7-zip(7za.EXE)用于归档同名文件&;存储文件夹信息_C#_.net_Visual Studio 2005_C# 2.0_7zip - Fatal编程技术网

C#中的7-zip(7za.EXE)用于归档同名文件&;存储文件夹信息

C#中的7-zip(7za.EXE)用于归档同名文件&;存储文件夹信息,c#,.net,visual-studio-2005,c#-2.0,7zip,C#,.net,Visual Studio 2005,C# 2.0,7zip,我的软件应该使用7zip将文件收集到.zip或.7z存档中,但由于软件的性质,有许多文件具有相同的名称,但目录不同,如: D:\Software\Components\Station1\Alarms\Logs\ValvePressureSensor.xml D:\Software\Components\Station1\Configurations\ValvePressureSensor.xml D:\Software\Components\Station2\Alarms\Logs\ValveP

我的软件应该使用7zip将文件收集到.zip或.7z存档中,但由于软件的性质,有许多文件具有相同的名称,但目录不同,如:

D:\Software\Components\Station1\Alarms\Logs\ValvePressureSensor.xml
D:\Software\Components\Station1\Configurations\ValvePressureSensor.xml
D:\Software\Components\Station2\Alarms\Logs\ValvePressureSensor.xml
这些文件存储在“FileList.lst”列表中,我通过以下方式调用7-zip:

7za a -t7z "D:\Software\CollectedData\Diagnostics.7z" 
"@D:\Software\ZipTemp\FileList.lst"
所以我想知道是否有一种方法可以在压缩每个文件时保留它们的目录,以防止7-zip标记重复的文件


我知道解决方法是从每个文件路径的开头删除“D:\”,但这是不可能的,因为“FileList.lst”在C#代码中填充了大约1500~3000个文件(并不总是相同的文件),FileList.lst位于一个临时文件夹中,该文件夹被创建、压缩,然后动态销毁。所以我无法将7za.EXE存储在同一个区域。除此之外,文件列表还被另一个需要文件路径中指定的驱动器的可执行文件使用

我应该提到我正在使用VisualStudio2005、C#2.0和7-zip v9.20

编辑:我之前的问题相当广泛,我应该澄清我正在从WinZip切换(由于许可问题),所以我记得在WinZip中,如果添加-p开关,WinZip将存储所有添加文件的文件夹信息,而不仅仅是子文件夹中的文件;文件夹信息将以命令行上指定的文件夹开始。你知道7zip里有类似的东西吗

编辑2:原来你不能用7-zip保存文件夹信息

我知道从每个文件路径的开头删除“D:\”的解决方法,但是手动删除是不可能的

所以动态地移除它。如果您的路径是一致的,那么一个简单的
path.Substring(3)
就足够了

我知道从每个文件路径的开头删除“D:\”的解决方法,但是手动删除是不可能的


所以动态地移除它。如果您的路径是一致的,一个简单的
path.Substring(3)
就足够了。

关于
7za.exe
的使用问题更适合超级用户。为什么不使用C来创建zip文件而不是使用7zip?有几个库,比如DotNetZip或SharpZipLib(或者如果您使用的是.NET3.0及以上版本,System.IO.Packaging和System.IO.Compression)。@Karl JohanSjögren或7z.dll附近的C#wrapper@kenny see EDIT,这是仅使用香草7-zip就可以实现的,还是sevenzipsharp允许的?@DarthSheldon,对不起,我不知道。我有一个类似的路径问题,我必须解决。我认为C#包装没有添加任何可以通过命令行获得的功能。关于使用
7za.exe
的问题更适合超级用户。为什么不使用C#来创建zip文件而不是使用7zip?有几个库,比如DotNetZip或SharpZipLib(或者如果您使用的是.NET3.0及以上版本,System.IO.Packaging和System.IO.Compression)。@Karl JohanSjögren或7z.dll附近的C#wrapper@kenny see EDIT,这是仅使用香草7-zip就可以实现的,还是sevenzipsharp允许的?@DarthSheldon,对不起,我不知道。我有一个类似的路径问题,我必须解决。我不认为C#包装器添加了任何可以通过命令行获得的功能。除此之外,文件列表还被另一个需要文件路径中指定的驱动器的可执行文件使用。@DarthSheldon:有两个文件是问题吗?好奇我将如何实现这一点?到现在为止,我已经有了foreach(FileInfoWrapper-in-files){incrementZipStatusBar();FileInfo-item=wrapper.Info-as-FileInfo;includedFiles.Add(item.FullName.ToLower(),null);其中项表示文件路径,includedFiles将文件添加到文件列表中。lstalpath不包含.Substring()据我所知,很抱歉,我忘了将这些文件发送给您。除此之外,另一个可执行文件正在使用文件列表,它确实需要文件路径中指定的驱动器。@DarthSheldon:有两个文件是问题吗?好奇我将如何实现这一点?到目前为止,我有foreach(FileInfoWrapper in files){incrementZipStatusBar();FileInfo item=wrapper.Info as FileInfo;includedFiles.Add(item.FullName.ToLower(),null);其中item表示文件路径,includedFiles将文件添加到FileList.lstals路径不包含.Substring()据我所知,对不起,我忘了把这些给你