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

C++ 执行从c+传递的cmd pmt中带有空格的文件名+;程序,c++,boost,filesystems,filepath,C++,Boost,Filesystems,Filepath,我目前正在让我的程序执行一个程序(如power point),然后在它旁边找到我要打开的文件的路径。我的程序正在使用以下命令获取文件路径: dirIter2->path() 我获取程序和文件的两个路径,将它们合并为一个字符串,并将它们传递到以下内容: system(PathTotal.c_str()) 这很好,但我唯一的问题是,当文件名在其名称命令提示符中有空格时,它会说找不到文件(因为它认为文件名在到达第一个空格时结束)。我曾尝试用引号将其括起来,但需要括起来的是实际文件名。 (例如,我试过“

我目前正在让我的程序执行一个程序(如power point),然后在它旁边找到我要打开的文件的路径。我的程序正在使用以下命令获取文件路径:

dirIter2->path()

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

system(PathTotal.c_str())

这很好,但我唯一的问题是,当文件名在其名称命令提示符中有空格时,它会说找不到文件(因为它认为文件名在到达第一个空格时结束)。我曾尝试用引号将其括起来,但需要括起来的是实际文件名。 (例如,我试过“C:\users\bob\john is cool”,但它必须是这样的:C:\users\bob\“john is cool”)

有人对我如何解决这个问题有什么建议吗?我正在考虑获取文件所在文件夹的路径,然后获取文件名。我会用引号将文件名括起来,然后将其添加到文件夹的路径。我已尝试使用->path()与上面一样,但唯一的问题是它只进入文件夹的目录之外

是否有一个boost命令可以获取文件的enitre路径而不获取文件

如果有人有更好的建议,我不赞成这个想法


谢谢

我不熟悉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是我熟悉的最接近的东西。我已经把它做成了一个社区wiki,如果有人可以在C和C++中把代码编译成等价的C.< /P>< P>,那么“\”是一个转义字符。对于某些事情(比如‘\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");

我还想补充一点,有时需要逃离以下空间:

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


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

无效的假设--它很好地引用了整个内容。不必为了引用尽可能小的部分而走极端。干杯,@Alf--我尝试引用整个字符串--由于某种原因,它不起作用,我也遇到了同样的问题直到我在有空格的地方加上引号。谢谢你的帮助comment@Jonston:我怀疑你做错了什么。例如,引用“整个字符串”包括参数。或者,不理解
\“C++中的。或类似的东西。尝试在绝对最小但完整的程序中重现问题。如果创建程序的过程不能为你解决问题,请发布代码。如果它确实解决了问题,请告诉我。-我不会尝试这个,因为我不能理解它。我有太多错误的假设。例如,路径分隔符是\,而不是/(参见示例“C:\users\…”)。但是,路径分隔符也经常出现在参数中:
“C:\Program Files\MyApp\MyApp.exe”“C:\Documents and Settings\Bob\My Documents\Janur.MyApp”
-请注意,您可能需要同时引用程序名和参数。他没有询问引用程序路径,只是询问名称。如果他也想引用这条路,那只是我在这里写的一个微不足道的补充。但是,是的,我弄坏了路径分隔符,我现在就修。