mfc刪除文件夾
Ⅰ 用MFC如何刪除指定文件夾下指定擴展名的文件
用個最簡單的辦法 調用dos
假定dPath為要刪除的路徑 擴展為.a
CString dPath; //目標路徑
dPath=....; //橘圓指定路徑
CString toPath; //跳轉做伍枝該目標路徑
toPath.Format("Dir %s",dPath);
system(toPath); //跳轉到該路徑
system("del *.a"); /純敏/刪除該路徑下所有.a
Ⅱ MFC中的CFindFile有個FindNextFile()函數
你是要尋找文件的例子吧
給你個例子
刪除文件夾
刪除文件夾你在cmd裡面刪除試試,他會提示文件夾不為空不能梁困刪除。意思就是必須先刪除文件夾裡面的文件再刪除喚渣瞎文件夾
刪除文件夾裡面的文件,就要用到尋找所有文件,包括文件夾裡面的文件夾(子文件夾)
*************************************************
函數名稱:BianLiDel
函數功能:刪除目錄下所有文件,最後刪除文件夾
返回值:成功返回TRUE失敗返回FALSE
************************************************
//以下是寬位元組用法
//窄位元組替換函數charsprintfstrcmp去掉_T()
//C:文件夾WenJianJia
//這時候會刪除WenJianJia這個目錄
BOOL BianLiDel(wchar_t*path)
{
wchar_tD_Path[MAX_PATH]={0};
wsprintfW(D_Path,_T("%s*.*"),path);//在文件名後面加上*.*,輸入C:文件夾WenJianJia就會變成C:文件夾WenJianJia*.*
WIN32_FIND_DATA wfd;//定義一個結構體
ZeroMemory(&wfd,sizeof(WIN32_FIND_DATA));//清空結構體和空
HANDLEfhn=FindFirstFile(D_Path,&wfd);//尋找第一個文件
BOOLbRet=TRUE;//如果第一個文件找到了就進入循環
while(bRet)
{
wchar_ttem[MAX_PATH]={0};
if(wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY&&_wcsicmp(_T("."),wfd.cFileName)!=0&&_wcsicmp(_T(".."),wfd.cFileName)!=0)
{ //判斷是否為目錄判斷文件夾名字是否為'.'和'..'
wsprintfW(tem,_T("%s%s\"),path,wfd.cFileName);
BianLiDel(tem);//是目錄就刪除目錄下的文件
}else{
wsprintfW(tem,_T("%s%s"),path,wfd.cFileName);
SetFileAttributes(tem,FILE_ATTRIBUTE_NORMAL);
DeleteFile(tem);//不是就刪除文件
}
ZeroMemory(&wfd,sizeof(WIN32_FIND_DATA));//清空結構體
bRet=FindNextFile(fhn,&wfd);//尋找下一個文件
}
FindClose(fhn);//如果不關閉會一直提示被佔用
returnRemoveDirectory(path);//刪除目錄
}
Ⅲ 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;
}
Ⅳ 怎樣在VC++中刪除一個類
(1)將項目工作區窗口切換到File View頁面,展開Source Files和Header Files節點,選定要刪除類對應的.h和.cpp文件,按下【Delete】鍵,刪除這兩個文件。
(2)選擇「文件」→「關閉工作區間」菜單命令,關閉項目。
(3)從當前文件夾里刪除對應的.h和.cpp文件與.clw文件。
(4)從新打開該項目文件後,按【Ctrl+W】快捷鍵,就會彈出一個對話框,詢問是否重新建立Class Wizard數據文件,單擊【是】按鈕,彈出對話框後,再點擊【Add All】(這個按鈕看情況,有時不用點擊也行),然後單擊【OK】就行了,進入了MFC Class Wizard對話框,單擊【確定】按鈕即可。
Ⅳ MFC點擊按鈕打開對話框選擇文件夾(不是文件)
選擇所選擇的文件夾,獲取文件夾的路徑:
CString
m_FileDir;
BROWSEINFO
bi;
ZeroMemory(&bi,
sizeof(BROWSEINFO));
bi.hwndOwner
=
m_hWnd;
bi.ulFlags
=
BIF_RETURNONLYFSDIRS;
LPITEMIDLIST
pidl
=
SHBrowseForFolder(&bi);
BOOL
bRet
=
FALSE;
TCHAR
szFolder[MAX_PATH*2];
szFolder[0]
=
_T('');
if
(pidl)
{
if
(SHGetPathFromIDList(pidl,
szFolder))
bRet
=
TRUE;
IMalloc
*pMalloc
=
NULL;
if
(SUCCEEDED(SHGetMalloc(&pMalloc))
&&
pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
m_FileDir
=
szFolder;//選擇的文件夾路徑
查找所有MDB文件(記錄數組自己寫吧)
CFileFind
ff;
BOOL
res
=
ff.FindFile(m_FileDir+"*.mdb");
while(res)
{
res
=
ff.FindNextFile();
//不遍歷子目錄
if(!ff.IsDirectory()
&&
!ff.IsDots())
{
CString
strFile
=
ff.GetFileName();
…//
在這里寫需要的代碼
}
}
ff.Close();
//
不要忘記關閉
Ⅵ mfc怎樣獲取一個文件夾下所有的文件
voidCXXXDlg::SearchFiles(CStringstrMusicFolder)
{
局扒喊CFileFindff;
strMusicFolder+=_T("\");
strMusicFolder+=_T("*.*");
BOOLres=ff.FindFile(strMusicFolder);
while(res)
{
res=ff.FindNextFile();
此世桐野if(!ff.IsDirectory()&&!ff.IsDots())
{
afxMessageBox(ff.GetFilePath());
}
}
ff.Close();
}
Ⅶ mfc中怎麼刪除一個新建類
.clw和.opt是VC6或早期環境下才有的文件,故只需刪除.h .cpp及 .aps文件即可.