當前位置:編程學習大全網 - 源碼下載 - MFC CFileFind和CFile遍歷壹個指定文件夾並刪除裏面的所有文件(裏面沒有下層文件夾目錄)問題

MFC CFileFind和CFile遍歷壹個指定文件夾並刪除裏面的所有文件(裏面沒有下層文件夾目錄)問題

首先鄙視壹下樓主的代碼 毫無章法 亂定義變量 居然還不按同壹風格定義

其次 妳寫的這玩意 我不知道 妳是想學習字符轉換呢 還是 想遍歷文件

最後我想說的是 他們說的都沒找到本質問題上去

把這句話

pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();

改為 下面2句

CString str = finder.GetFilePath();

pFile = (LPSTR)(LPCTSTR) str;

妳的程序就沒問題了

下面看偶的分析

第壹

char* pFile;

TCHAR* p;

妳讓 p = pFile ; 居然沒出問題 說明 妳的char 和 TCHAR 是壹樣的玩意 妳多半用的是VC6開發

要麽就是自己設置了工程屬性為 多字節的, 所以根本不存在什麽 字符集的轉換

什麽 UNICODE ANSI 多字節都是瞎扯

第二

斷點tiao'shi

pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();

執行後 pFile 指向的是亂碼 所以妳再往後運行肯定就會出錯了

仔細看壹下 finder.GetFilePath() 返回的是壹個CString;

莫非樓主的 從CString 轉換 為 char * 的方式錯誤了?

測試

CString str("123");

pFile = (LPSTR)(LPCTSTR) str;

完全沒有問題啊...

所以問題 歸根到底 在與 返回值是 CString 會導致很多 bug的哦

這如果要說起來就太多了... 樓主再找度娘吧

//-- 下面的寫法稍微規範點 我就不懂 妳定義 TCHAR 為了什麽

int main()

{

CFileFind finder;

CString path("D:\\1\\Cache\\");

CString file;

BOOL has = finder.FindFile(path+"*.*");

while(has)

{

has = finder.FindNextFile();

//IsDots 就是的 . 和 .. 如果妳不判斷是文件夾 它會把當成文件去刪除,結果去刪除不掉

//在Windows系統下 文件和文件夾被看作同樣的東西

if( !finder.IsDots() && !finder.IsDirectory() )

{

file= finder.GetFilePath();

//CFile::Remove(file); 妳這函數都沒有返回值 妳好意思直接就在下面顯示刪除成功

if (DeleteFile(file))

{

cout<<file<<" 刪除成功"<<endl;

}

else

{

cout<<file<<" 刪除失敗, 非***享的文件是否正在使用?"<<endl;

}

}

}

finder.Close(); //----

return 0;

}

  • 上一篇:為什麽要學習ui設計?
  • 下一篇:Android支持庫23.2有什麽新功能?
  • copyright 2024編程學習大全網