其次 妳寫的這玩意 我不知道 妳是想學習字符轉換呢 還是 想遍歷文件
最後我想說的是 他們說的都沒找到本質問題上去
把這句話
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;
}