C++實現檔案刪除
來源:互聯網
上載者:User
我在程式中使用的刪除檔案夾的方法,不知對你有沒有協助
bool DeleteDirectory(AnsiString DirName)
{
//該函數刪除一個非空的目錄DirName
SHFILEOPSTRUCT filestruct;
memset(&filestruct,0,sizeof(filestruct)); //將該結構緩衝區用0填充
filestruct.hwnd=NULL;
filestruct.wFunc=FO_DELETE;//執行刪除
filestruct.pFrom=DirName.c_str();
filestruct.pTo=NULL;
filestruct.fFlags=FOF_NOCONFIRMATION+FOF_SILENT;
filestruct.hNameMappings=NULL;
if(SHFileOperation(&filestruct)==0)
return true;
else
return false;
}
//另外,我從別人那兒得到的一種方法如下
bool __stdcall deldir(char * dir_fullpath) // 刪除指定的目錄
{
char dir[260];
char filename[260];
int len = 0;
int ch = '//';
strcpy(dir, dir_fullpath);
len = strlen(dir);
char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能為磁碟根目錄或者不是有效目錄路徑
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目錄後添加'/'
strcat(dir, "//");
}
GetCurrentDirectory(260, filename);
strcat(filename, "//");
if(strcmp(dir, filename) == 0) // 如果要刪除的目錄是目前的目錄
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改變目前的目錄
}
WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;
strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;
if(fFile!=INVALID_HANDLE_VALUE) // 此目錄不是空目錄
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 刪除找到的子目錄
strcat(filename, "//");
flag = flag && deldir(filename);
}
else
{ // 刪除找到的檔案
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}