繁体   English   中英

在cmd pmt中执行带空格的文件名从c ++程序传递

[英]executing filenames with spaces in cmd pmt Passed from c++ program

我目前正致力于让我的程序执行程序(例如电源点),然后在它旁边找到我要打开的文件的路径。 我的程序通过使用以下方式获取文件的路径:

dirIter2->path()

我得到程序和文件的2个路径,将它们合并为一个字符串并将它们传递给以下内容:

system(PathTotal.c_str())

这工作得很好,但我唯一的问题是当文件名在其名称命令提示符中有空格时说它无法找到该文件(因为它认为文件名在到达第一个空格时结束。我试图包装它有引号但它是需要包装的实际文件名。(例如,我试过“C:\\ users \\ bob \\ john很酷”但它需要像这样:C:\\ users \\ bob \\“john很酷”)

有没有人对我如何解决这个问题有任何建议? 我正在考虑获取文件夹的路径,然后获取文件名。 我会用引号包装文件名,然后将其添加到文件夹的路径。 我尝试使用像上面这样的 - > path(),但唯一的问题是它只能到文件夹目录的外面吗?

是否有一个boost命令可以在不获取文件的情况下获取文件的enitre路径?

如果有人有任何更好的建议,我不会接受这个想法

谢谢

在C和C ++中,'\\'是转义字符。 对于某些事物(如'\\ n'或'\\ t'),它会插入一个控制代码; 否则,它只会给你下一个角色。

所以如果你做的事情如下:

fopen("C:\users\bob\john is cool", "r");

它会尝试打开一个名为的文件

C:usersbobjohn is cool

如果你想在输出中使用那些'\\'字符,你必须将它们转义。 所以你想要:

fopen("C:\\users\\bob\\john is cool", "r");

在使用Visual Studio的Windows上,我还成功使用了Unix风格的分隔符:

fopen("C:/users/bob/john is cool", "r");

事实上,你可以将它们混合起来:

fopen("C:/users\\bob/john is cool", "r");

我不熟悉C字符串操作,但你不能轻易地完成以下操作吗?

int i = path.lastIndexOf("\\"); //Find the index of the last "\"
String quotedPath = path.substring(0, i+1); //Get the path up until the last "\"
quotedPath += "\"" + path.substring(i+2) + "\""; //Add quotes and concatenate the filename

对不起Java,它是我最熟悉的东西。 我已经把它变成了一个社区维基,以防有人可以将代码编辑到等效的C.

我还想补充一点,有时需要转义空格,如下所示:

cmd.exe -CC:/Program\\ Files/Application\\ Folder/Executable\\ with\\ spaces.exe

要么

cmd.exe -CC:\\\\Program\\ Files\\\\Application\\ Folder\\\\Executable\\ with\\ spaces.exe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM