在我正在做的一個遊戲中,裏面的文本文件夾代表世界保存,在這個遊戲的加載菜單中,我想有一個選項來刪除保存。我目前使用此代碼嘗試刪除節省:C++文件夾不會刪除,直到我關閉程序
hFind = FindFirstFile((dir+"/*").c_str(), &FindFileData);
if (hFind){
do{
string s = FindFileData.cFileName;
if(s.find('.')){//prevents prossesing of "." and ".."
DeleteFile((dir+"/"+s).c_str());
}
}while(FindNextFile(hFind,&FindFileData));
CloseHandle(hFind);
}
rmdir(dir.c_str());
在這些文件夾中的唯一的東西是3個文本文件,因此,這段代碼應該是足夠的,但事實並非如此。會發生什麼情況是目錄中的所有文件都將被刪除,但不是文件夾,如果我嘗試手動刪除此文件夾,或者在程序運行時以任何方式編輯它,Windows會拒絕我訪問。但是一旦我關閉遊戲,文件夾就會被刪除。
我知道里面的文件被刪除了,因爲我用上面的代碼去掉了「rmdir(dir.c_str());」並打開文件夾,所有的文件都沒有了,如果我「刪除」保存,然後嘗試加載它,上面的代碼也沒有世界,沒有庫存,表明文件已被刪除。
我試過用removeDirectory和同樣的事情發生,它也說它已成功刪除沒有任何錯誤。
爲什麼會發生這種情況?我怎樣才能避免這種情況,並讓它正常工作?
任何幫助將不勝感激。
的問題fixxed用下面的代碼:
hFind = FindFirstFile((dir+"/*").c_str(), &FindFileData);
if (hFind){
do{
string s = FindFileData.cFileName;
if(s.find('.')){//prevents prossesing of "." and ".."
DeleteFile((dir+"/"+s).c_str());
}
}while(FindNextFile(hFind,&FindFileData));
CloseHandle(hFind);
}
findClose(hFind);
rmdir(dir.c_str());
你應該堅持使用API並使用RemoveDirectory。 http://msdn.microsoft.com/en-us/library/aa365488%28VS.85%29.aspx如果刪除失敗,您檢查錯誤返回代碼並調用GetLastError()。 rmdir()不會給你這些信息(或者至少,很容易)。 – PaulMcKenzie
您還應該檢查'DeleteFile'是否成功。 –
隨着RemoveDirectory同樣的事情發生,並沒有發生錯誤,除非我單擊刪除不止一次,因爲該程序必須認爲該目錄已被刪除 – MurderFish612