system问题

kingstarer 2009-10-14 03:53:11
system("C:\\windows\\system32\\notepad.exe test.cpp");
调用成功 system返回0

给C:\\windows\\system32\\notepad.exe加上双引号再调用
system("\"C:\\windows\\system32\\notepad.exe\" test.cpp");
调用失败 system返回非0

而在cmd下面,无论第一个命令还是第二个命令都能调用成功

有没有人碰上过这个问题,为什么会这样呢 要怎么解决?

不加引号调用system,如果可执行文件有空格就会出问题
加上引号则调用不成功,真郁闷~

换成winexec的话又无法通过返回值知道程序执行是否成功
...全文
120 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garfield 2009-10-15
  • 打赏
  • 举报
回复
同学,你是长路径转短路径
因此
c:\program file\abc.txt,它对应的短路径是:\progra~1\abc.txt
c:\program file2\abc.txt,它对应的短路径是:\progra~2\abc.txt

长路径是唯一的吧?那短路径就是系统会自己处理那些1234,你不用管,这函数是1:1映射的。
你自己md两个文件夹再dir/X看一下吧
kingstarer 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 garfield 的回复:]
引用 4 楼 kingstarer 的回复:
GetShortPathName把名字缩短是按什么原则?

有没有可能导致重名出现

例如c:\program file\abc.txt 、 c:\progra~1\abc.txt 和c:\program file2\abc.txt


你想多一下就知道不可能了。不然文件系统就乱套了。
[/Quote]
这里我就是想不明白,长文件名转换成短文件名理论上包含的信息少了,不知道是凭什么保证的,~这个符号并不是特殊符号啊
kingstarer 2009-10-15
  • 打赏
  • 举报
回复
查了一下cmd的帮助 解决了 加上一个空格搞掂 :)
louyong0571 2009-10-15
  • 打赏
  • 举报
回复
持续关注
Garfield 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kingstarer 的回复:]
GetShortPathName把名字缩短是按什么原则?

有没有可能导致重名出现

例如c:\program file\abc.txt 、 c:\progra~1\abc.txt 和c:\program file2\abc.txt
[/Quote]

你想多一下就知道不可能了。不然文件系统就乱套了。
lihan6415151528 2009-10-15
  • 打赏
  • 举报
回复
CreateProcess
kingstarer 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lsldd 的回复:]
最好的办法是使用API函数CreateProcess,能用引号,能返回错误信息。
[/Quote]
这是终极的解决方法了,我想先看看单纯用system能不能解决这个问题

毕竟system用起来方便很多
kingstarer 2009-10-15
  • 打赏
  • 举报
回复
GetShortPathName把名字缩短是按什么原则?

有没有可能导致重名出现

例如c:\program file\abc.txt 、 c:\progra~1\abc.txt 和c:\program file2\abc.txt
beckle_ye 2009-10-15
  • 打赏
  • 举报
回复
啊,为什么我在VS2005下面,两条语句都能执行?

LZ能不能解释一下?
Garfield 2009-10-14
  • 打赏
  • 举报
回复
楼主请用GetShortPathName
beckle_ye 2009-10-14
  • 打赏
  • 举报
回复
关注
lsldd 2009-10-14
  • 打赏
  • 举报
回复
最好的办法是使用API函数CreateProcess,能用引号,能返回错误信息。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧