国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

實(shí)現(xiàn)關(guān)機(jī)重啟后文件操作

2019-11-10 18:39:18
字體:
供稿:網(wǎng)友

使用Windows API函數(shù)MoveFileEx

函數(shù)原型

BOOL MoveFileEx(LPCTSTR lpExistingFileName, // file nameLPCTSTR lpNewFileName, // new file nameDWord dwFlags // move options);

這里附上MSDN的官方解釋

If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and lpNewFileName is NULL, MoveFileEx registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.

注意到這里寫的,MoveFileEx可以刪除目錄,只能當(dāng)目錄為空的時(shí)候,那這里只能循環(huán)遍歷文件夾遍歷清空了

尋找遍歷文件夾的方法

參考博客c++利用windows api遍歷指定文件夾及其子文件夾中的文件

#include "stdafx.h" #include <iostream> #include "windows.h" #include <string.h> #include <Strsafe.h> using namespace std; //傳入要遍歷的文件夾路徑,并遍歷相應(yīng)文件夾 void TraverseDirectory(wchar_t Dir[MAX_PATH]) { WIN32_FIND_DATA FindFileData; HANDLE hFind=INVALID_HANDLE_VALUE; wchar_t DirSpec[MAX_PATH]; //定義要遍歷的文件夾的目錄 DWORD dwError; StringCchCopy(DirSpec,MAX_PATH,Dir); StringCchCat(DirSpec,MAX_PATH,TEXT("http://*")); //定義要遍歷的文件夾的完整路徑/* hFind=FindFirstFile(DirSpec,&FindFileData); //找到文件夾中的第一個(gè)文件 if(hFind==INVALID_HANDLE_VALUE) //如果hFind句柄創(chuàng)建失敗,輸出錯(cuò)誤信息 { FindClose(hFind); return; } else { while(FindNextFile(hFind,&FindFileData)!=0) //當(dāng)文件或者文件夾存在時(shí) { if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0&&wcscmp(FindFileData.cFileName,L".")==0||wcscmp(FindFileData.cFileName,L"..")==0) //判斷是文件夾&&表示為"."||表示為"." { continue; } if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0) //判斷如果是文件夾 { wchar_t DirAdd[MAX_PATH]; StringCchCopy(DirAdd,MAX_PATH,Dir); StringCchCat(DirAdd,MAX_PATH,TEXT("http://")); StringCchCat(DirAdd,MAX_PATH,FindFileData.cFileName); //拼接得到此文件夾的完整路徑 TraverseDirectory(DirAdd); //實(shí)現(xiàn)遞歸調(diào)用 } if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==0) //如果不是文件夾 { wcout<<Dir<<"http://"<<FindFileData.cFileName<<endl; //輸出完整路徑 } } FindClose(hFind); } } int _tmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] ) { locale loc( "chs" ); //支持中文輸出,否則wchar可能無法輸出值為中文的變量 wcout.imbue( loc ); TraverseDirectory(L"C://Users//v_tianboli//Desktop//windows程式設(shè)計(jì)開發(fā)指南"); //遍歷指定的文件夾,此處文件路徑可按具體情況修改 system("pause"); return 0; }

編寫DeleteAllFileReboot樣例程序

這里暫時(shí)使用了SOUI的界面庫作為載體。核心函數(shù)中暫時(shí)使用DeleteFile進(jìn)行測(cè)試:

HRESULT CMainDlg::DeleteFolder(wchar_t Dir[MAX_PATH]){ WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; wchar_t DirSpec[MAX_PATH]; //定義要遍歷的文件夾的目錄 DWORD dwError; StringCchCopy(DirSpec, MAX_PATH, Dir); StringCchCat(DirSpec, MAX_PATH, TEXT("http://*")); //定義要遍歷的文件夾的完整路徑/* hFind = FindFirstFile(DirSpec, &FindFileData); //找到文件夾中的第一個(gè)文件 if (hFind == INVALID_HANDLE_VALUE) //如果hFind句柄創(chuàng)建失敗,輸出錯(cuò)誤信息 { FindClose(hFind); return S_FALSE; } else { while (FindNextFile(hFind, &FindFileData) != 0)//當(dāng)文件或者文件夾存在時(shí) { if ((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0 && wcscmp(FindFileData.cFileName, L".") == 0 || wcscmp(FindFileData.cFileName, L"..") == 0) //判斷是文件夾&&表示為"."||表示為"." { continue; } if ((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0) //判斷如果是文件夾 { wchar_t DirAdd[MAX_PATH]; StringCchCopy(DirAdd, MAX_PATH, Dir); StringCchCat(DirAdd, MAX_PATH, TEXT("http://")); StringCchCat(DirAdd, MAX_PATH, FindFileData.cFileName); //拼接得到此文件夾的完整路徑 DeleteFolder(DirAdd); //實(shí)現(xiàn)遞歸調(diào)用 } if ((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) == 0) //如果不是文件夾 { //拼出完整路徑 if (0 != wcscmp(FindFileData.cFileName, L"test_delete_file.txt")) { SStringW strFileName; strFileName.Format(L"%s//%s", Dir, FindFileData.cFileName); // DeleteFile(strFileName); MoveFileEx(strFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); } } } FindClose(hFind); } return S_OK;}

調(diào)用處需要能夠彈出選擇文件夾的選擇窗口,這里參考了[Win32]打開文件/保存文件/選擇文件夾對(duì)話框博客里面的方法:

HRESULT CMainDlg::OnChooseFolder(){ TCHAR szBuffer[MAX_PATH] = {0}; BROWSEINFO bi = {0}; bi.hwndOwner = NULL; //擁有著窗口句柄,為NULL表示對(duì)話框是非模態(tài)的,實(shí)際應(yīng)用中一般都要有這個(gè)句柄 bi.pszDisplayName = szBuffer; // 接收文件夾的緩沖區(qū) bi.lpszTitle = TEXT("選擇一個(gè)文件夾"); // 標(biāo)題 bi.ulFlags = BIF_NEWDIALOGSTYLE; LPITEMIDLIST idl = SHBrowseForFolder(&bi); if (SHGetPathFromIDList(idl, szBuffer)) { SOUI::SWindow *pText = FindChildByName2<SOUI::SWindow>(L"text_folder_path"); assert(pText); pText->SetWindowText(szBuffer); } else { SMessageBox(NULL, TEXT("請(qǐng)選擇一個(gè)文件夾"), NULL, MB_ICONERROR); } return S_OK;}

稍微完善下代碼,現(xiàn)在已經(jīng)完成了指定目錄,可以刪除指定目錄下除了文件夾之外的所有內(nèi)容的功能。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 迁西县| 岳池县| 利川市| 博野县| 昌邑市| 太仆寺旗| 巴塘县| 漯河市| 屯昌县| 济源市| 桐柏县| 武冈市| 卫辉市| 杨浦区| 博客| 瑞丽市| 石狮市| 温宿县| 明星| 永德县| 竹山县| 伊宁市| 阳原县| 康保县| 班玛县| 拜城县| 犍为县| 德江县| 富宁县| 拉孜县| 上林县| 叙永县| 新竹县| 格尔木市| 天门市| 永济市| 闽清县| 商水县| 文昌市| 明溪县| 博湖县|