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

时间:2010-11-14 23:06:56

标签: c++ boost filesystems filepath

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

dirIter2->path()

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

system(PathTotal.c_str())

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

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

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

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

由于

3 个答案:

答案 0 :(得分:1)

在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");

答案 1 :(得分:0)

我不熟悉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。

答案 2 :(得分:0)

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

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

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