2014-06-12 168 views
0

我正在努力解決一個奇怪的問題。 我要創造我的程序的解決方案的文件夾,我已經寫了下面的代碼:_mkdir奇怪的行爲C++

timer = time(NULL); 
path.assign(".\\Solution_"); 
path.append(ctime(&timer)); 
ch1 = ':'; 
ch2 = '_'; 
for (i = 0; i < path.length(); ++i) { 
    if (path[i] == ch1 || path[i] == ' ') 
    path[i] = ch2; 
    } 

mkdir(path.c_str()); 

它不創造任何即使路徑等於「 \ Solution_Thu_Jun_12_10_10_31_2014」如果我輸入

mkdir(".\\test"); 

它工作正常。 我做了很多測試,我盡我所能,但我無法弄清楚什麼是錯的。 任何人都可以幫助我嗎? 最佳, 羅伯託

詳細信息: 即使我使用mkdir(path.c_str());與路徑等於「Solution_Thu_Jun_12_11_52_04_2014」(沒有任何\),它不反正工作,並在另一邊「的mkdir(‘測試’);」作品。

解決方案: 好吧,有一個隱藏的換行符。 感謝大家的幫助: - )!!!

+0

你在嵌入式系統上運行? IIRC mkdir不是該標準的一部分。 –

+1

該問題是由於通過反斜槓'\'逃脫。做'。\\解決方案...'應該可以工作。 –

+0

當你在'mkdir(path.c_str())之前'cout path.cstr()'時輸出什麼?如果用'mkdir(「。\\ Solution_Thu_Jun_12_10_10_31_2014」);''替換mkdir(「。\\ test」);它會工作正常嗎? – Aserre

回答

0

您遇到的問題是反斜槓字符是轉義序列的開始。這些用於向流中輸入一個不可打印的字符(製表符,回車符等)。

所以你的程序看到一個反斜槓,並期待下一個字符將是一個命令字符。如果它看到另一個反斜槓,那麼它知道你想要一個反斜槓而不是一個轉義序列,因此\\工作和\不。

由於您正在運行Windows的風格,您可以使用CreateDirectory函數。

此外,你已經把你的例子是C,而不是C++。你從哪裏學習?

+0

是的,這是C ...我使用的環境是MS Visual C++快速版。這只是誤導:-) – StopThePigeon

+0

我不想使用CreateDirectory函數,我沒有得到你所說的「...因此,爲什麼\作品和\不。」 您建議的解決方法是什麼? – StopThePigeon

+0

我認爲值得一提的是,如果我使用'mkdir(path.c_str());路徑等於「Solution_Thu_Jun_12_11_52_04_2014」(沒有任何\),但它無法正常工作,'mkdir(「test」);'作品。 – StopThePigeon

0

檢查窗口中是否存在換行符或其他非法字符。你的錯誤看起來像那樣。

Windows不允許在文件名字符這些<>?/\| or newline