关于使用 ProcessStartInfo 类时的文件目录包含空格问题的解决方法

  前段时间项目中使用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、博客园以及为代码、资料、问题等资源分享作出贡献的人们,是你们的帮助使得更多问题得到解决!

时间: 2025-01-12 01:37:13

关于使用 ProcessStartInfo 类时的文件目录包含空格问题的解决方法的相关文章

移动硬盘出现 文件目录损坏且无法读取 解决方法教程(一)

一些如正在读取数据时突然强行将硬盘断开或者断电等因素导致的,硬盘磁盘分区损坏的修复办法,这个主要是磁盘的分区损坏了~ 一般移动硬盘比较多见,原因有很多.但是一般的都是:正在读取数据的时候直接把移动硬盘的的数据线拔下,或者突然断电引起的. 解决办法有2种(请按照顺序尝试): 方法一: 开始>运行打开运行菜单       输入 chkdsk /f 不用理会它提示的信息直接Y 然后回车 接下来重新启动电脑(确保出问题的硬盘或移动硬盘和电脑处于链接状态) 电脑会自动检测磁盘错误只需等待就可以了 方法二:

SVN空格问题的解决方法

(注意:如果你的路径里有空格记得要在binpath的头尾用转义字符/"把整个个binpath框起来,D:\SVN\svnroot指svn资源库根目录) displayname指服务名称 depend指协议是tcpid start指开机自动启动 注意:以上的=后面的一个空格千万不要丢了 然后我们打开服务可以看到我们的服务已经是自动启动了

[转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题),第一行Start会成功执行,跳出记事本程序,而第二行,会 Start跳出一个新的命令提示符,标题上写着路径,但是不会执行任何命令,第三行Start命令行提示符会提示C:\Program文件不存在,提示无 法执行. start

bat调用全路径包含空格的exe程序

点击网页按钮事件,获取相应参数并传递给本地待调用的exe程序,我们采用的方式是在注册表中定义自己的协议,该自定义协议指明需要调用的应用程序,但由于参数要传递多个,没法直接调用,于是我们又写了一个bat文件,在注册表中指明要调用的bat,在bat中处理参数并调用相应的exe,碰到的第一个问题就是上篇小结中提到的bat调用相对路径时,应用程序上方图标不显示的问题,后来加了全路径好了,但如果全路径包含空格,bat处理又有问题,我们的处理方式是: set toolPathTemp="%~dp0"

使用innerHTML获取HTML代码时,HTML标记属性的双引号好多都消失不见了,原来是属性值中包含空格才会保留双引号

最近搞的一个项目中所使用的方式比较奇怪,用Label显示HTML内容,然后不断地使用JS把Label的innerHTML复制到TextBox中. 但是,昨天发现了一个问题,获取元素值的时候,有时候正常,有时候不正常,然后进入了漫长的DEBUG.. 调试过程中,监测Label和TextBox的值,发现获取到Label的值是未被改变的,控件加载的时候是怎样就怎样,在页面中是以SPAN元素显示,在查看网页源代码的时候可以看到被修改了,但是在后台无论怎么获取都是页面加载时赋予的未经修改之前的值. 而Te

Windows10 cd 包含空格的路径出错

给路径名上加上" "(两个双引号). 参考资料 关于cmd中执行命令路径包含空格的解决办法

老男孩教育每日一题-2017年4月13日-当你删除的多个文件中包含空格或其他特殊字符,请问如何做

当你删除的多个文件中包含空格或其他特殊字符,请问如何做 创建测试环境: mkdir -p  /oldboy/0413 cd   /oldboy/0413 touch oldboy" "{01..10}.log 别上来就rm -f oldboy*.log哟.

javascript不用正则验证输入的字符串是否为空(包含空格)

在项目中需要验证输入的字符串是否为空,包括空格,不太喜欢使用正则,所以就想到了js的indexOf函数,indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没有出现,则该方法返回 -1. 语法:stringObject.indexOf(searchvalue,fromindex),searchvalue必需,fromindex:可选参数,在字符串中开始检索的位置.它的合法取值是 0 到 stringObject.length - 1.如省略该参数,则将从

Java命令行执行参数中包含空格被截断的问题解决

使用java -jar命令在命令行执行jar包,传入参数时,参数包含空格,例如“hello world”,这个参数会被解析成两个参数“hello”和“world”.这样的结果是执行时不能正常的获取参数.这时只要在参数两边加上引号即可. 一开始使用的命令如下:java -jar Test.jar %{test}   —— %{test}为其他程序中传入的参数 修改之后的命令如下:java -jar Test.jar ‘%{test}‘  这样就可以作为一个参数获取值了