2012-09-19 53 views
0

我试着在#1找到了一些解决方案,但我不能得到它的工作,我要开始从C .LOG(.txt文件)++,但包含路径的文件夹它可能有空间,所以当我尝试启动它,我得到一个错误说它无法找到该文件,因为多环芳烃(含空格)是错误的,这里是我的代码如下所示:空间系统()C++

void Log (unsigned int Code,...) 
{ 
char currdate[11] = {0}; 
SYSTEMTIME t; 
GetLocalTime(&t); 
sprintf(currdate, "%02d:%02d:%02d", t.wHour, t.wMinute, t.wSecond); 

PROCESSENTRY32 pe32; 
FILE* FileHwnd1; 

FileHwnd1 = fopen("TEST.log","a+"); 
fprintf(FileHwnd1,"[%s] Code: %X\n",currdate,Code); 
fclose(FileHwnd1); 
char buffer[MAX_PATH]; 
GetModuleFileName(NULL, buffer, MAX_PATH); 
char Path[50]; 

wsprintf(Path,"start %s\\AntiHack.log",buffer); 
system(Path);//Here is where i get the containing spaces path error 
} 

感谢。

+2

通常你会环绕名与引号的空格。 – chris

回答

0

你可以试试:

wsprintf(Path,"start \"\" \"%s\"\\\AntiHack.log",buffer); 
+0

我认为你的意思是'开始\'%s \\ AntiHack.log \“'。 – chris

+0

我相信双方将努力 – ciphor

+1

真实的,但我们都错过了,你需要'开始“”“whatever.lol”'如果需要报价,否则将只是打开一个新的控制台窗口与作为标题(至少在Windows中,否则不确定)。我注意到你修正了\一个问题。 – chris

2

我劝你完全避免的系统调用和执行过程中推出自己。

  1. 使用AssocQueryString()来寻找您的 扩展相关的过程(在这种情况下,.LOG)
  2. 安装并启动CreateProcess()调用来调用,传递 适当的命令行。

还有其他的方法可以做到这一点,但正如你现在注意到的那样,一个循环的方式总会有缺陷。以上是Explorer.exe如何为扩展启动关联进程的过程。