2010-11-14 70 views
4

我目前正致力于让我的程序执行程序(如电源点),然后在它旁边打开我想要打开的文件的路径。我的计划是通过使用获得该文件的路径:在cmd pmt中执行空格的文件名从C++程序传递

dirIter2->path()

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

system(PathTotal.c_str())

这是很好的工作,但我唯一的问题是,当文件名的名称中有一个空格命令提示符说,它不能找到该文件(因为它认为文件名结束,当它到达第一个空间。它带有引号,但它是需要包装的acutal文件名。 (例如。我已经尝试过“C:\ users \ bob \ john很酷”,但它需要如下所示:C:\ users \ bob \“john很酷”)

有没有人对我如何修复这个?我正在考虑让文件夹的路径到达文件的位置,然后获取文件名。我会将文件名用引号括起来,然后将其添加到文件夹的路径中。我已经尝试使用上面的 - > path(),但唯一的问题是它只能到文件夹的目录之外?

是否有一个boost命令可以得到文件的启动路径而不会获取文件?

我不致力于为客户如果任何人有什么更好的建议

感谢

+0

无效的假设 - 它可以很好地引用了整个事情。没有必要去极端引用最小的可能部分。干杯&hth。, – 2010-11-14 23:33:08

+0

@Alf - 我试过引用整个字符串 - 它不工作,出于某种原因,我有与程序路径相同的问题,直到我只是把引号放在有空格的地方。感谢您的评论 – Johnston 2010-11-15 01:57:50

+1

@Jonston:我怀疑你做错了。就像引用“整个字符串”(包括参数)一样。或者,在C++中不理解'\“'或者类似的东西,尝试用一个绝对最小但完整的程序来重现问题,如果创建该程序的过程没有为你解决问题,请发布代码。它确实解决了这个问题,请告诉。:-) – 2010-11-15 02:35:43

回答

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

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

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

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

fopen("C:/users\\bob/john is cool", "r"); 
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,我已将其制作成社区维基。

+0

我不会尝试这个,因为我无法理解它,我认为错误的假设太多了,例如,路径分隔符是\不是/(参见示例“C:\ users \ ...”)但是,路径分隔符也经常出现在参数中:'“C:\ Program Files \ MyApp \ MyApp.exe”“C:\ Documents and Settings \ Bob \ My Documents \ January.MyApp“ - 注意你可能需要同时引用程序名和参数 – MSalters 2010-11-15 10:43:08

+0

他没有询问引用程序路径,只是名称如果他想引用它的路径这是我写在这里的一个微不足道的东西,但是,我搞砸了路径分隔符,现在我会解决这个问题。 – JohnS 2010-11-16 02:26:11

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