4

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

dirIter2->path()

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

system(PathTotal.c_str())

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

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

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

如果有人有更好的建议,我不会承诺这个想法

谢谢

4

3 回答 3

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");
于 2010-11-15T02:50:27.620 回答
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,它是我最熟悉的东西。我已将此作为社区 wiki,以防有人可以将代码编辑为等效的 C。

于 2010-11-14T23:14:30.620 回答
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

于 2010-11-16T04:17:31.887 回答