标签:
前段时间项目中使用7-zip压缩生成EPUB文件(2.01),但通过 EPUB-Checker.exe 软件检测发现 mimetype 文件不是第一个归档文件,经过对比怀疑7z中有自己默认的归档顺序,遂改用 winrar.exe 进行压缩(项目采用C#编写,通过CMD执行压缩命令),压缩步骤为:
1、压缩 mimetype 文件,命令:
"C:\Program Files\WinRAR\winrar.exe" a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\mimetype
其中:C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\ 为文件存放目录
2、压缩 OPS 目录,命令:
"C:\Program Files\WinRAR\winrar.exe" a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\OPS
3、压缩 META-INF 目录,命令:
"C:\Program Files\WinRAR\winrar.exe" a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\META-INF
按照这样的步骤执行了一下,以为会成功,但实际发现在一般情况下确实没问题,在XP系统上总报找不到某个文件,细看才发现是因为压缩文件(无论源文件和目标文件)中包含有空格时会被截断并当成几个但单独的命令参数,仔细一想就释然了(你包含空格控制台当然无法知道你想输入的是什么,这不是控制台的问题,更不是rar的问题)。
找到了原因开始摸索着解决它,发现无论是在命令上整体加引号还是直接取出空格,或是给空格加引号都不行,废了一些时间后想起了我们的好盆友度娘,通过度娘找到CSDN的@hufeikong君,此君早在10年就遇到这样的问题经大家合力找到了一下解决方案:
string command = @"""C:\Program Files\WinRAR\winrar.exe"" a -ep1 ""C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip"" ""C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\mimetype"""; startInfo.Arguments = @"/C (" + command + @")";
即在把所有文件路径单独包含在引号内,并将命令整体包含在括号内,这样再次执行,无论什么样的目录和文件名都能正常执行,问题完美解决!!
鉴于该问题(EPUB检测错误)解决之耗时及对本人的折磨之深,再此感谢度娘、CSDN、博客园以及为代码、资料、问题等资源分享作出贡献的人们,是你们的帮助使得更多问题得到解决!
关于使用 ProcessStartInfo 类时的文件目录包含空格问题的解决方法
标签:
原文地址:http://www.cnblogs.com/WhiteDragon/p/4959316.html