2013-04-06 77 views
0

這裏是我的代碼示例:爲什麼我無法創建這個文件?

int main(int argc, char* argv[]) 
{ 
    char* fileName = "%appdata%\\log.log"; 
    FILE *file; 
    file = fopen(fileName, "a+"); 
    time_t startTime = time(0); 
    fputs("Started logging at: ", file); 
    fputs(ctime(&startTime), file); 
    fclose(file); 
    printf("%s", fileName); 
    return 0; 
} 

我的程序下來到printf()聲明,並打印:

%APPDATA%\ log.log

我知道這是一個Windows計算機的可行位置,爲什麼程序無法生成.log文件?什麼是我應該用來使其工作的解決方法?

+2

您應該調用其中一個CSIDL或已知的文件夾API函數。不要依賴環境變量。 – 2013-04-06 23:33:18

回答

4

fopen調用不知道%appdata%是什麼,因爲它不能神奇地將其轉換爲路徑。您必須使用ExpandEnvironmentStrings函數自行擴展路徑。例如(未經測試):

char dest[MAX_PATH]; 
ExpandEnvironmentStrings(fileName, dest, MAX_PATH); 
file = fopen(dest, "a+"); 
+0

太棒了!經過一點點的鬼混,我就開始工作了。這正是我所期待的,謝謝。 – syb0rg 2013-04-06 23:39:35

4
%appdata% 

是一個環境變量,它們不會自動解決,需要明確使用getenv函數調用來檢索他們的價值觀。

相關問題