2012-09-19 92 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如何爲擴展啓動關聯進程的過程。