C++实现文件删除
2007-07-22 09:02
597 查看
我在程序中使用的删除文件夹的方法,不知对你有没有帮助
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;
}
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;
}
相关文章推荐
- 删除某路径下的物理文件 C++实现
- VC/MFC(C++)实现文件拷贝和文件删除等
- VC/MFC(C++)实现文件拷贝和文件删除等
- C++实现:把一个文件夹里的冗余文件(.txt)删除
- VC/MFC(C++)实现文件拷贝和文件删除等
- C++实现删除某个文件夹的文件
- 删除C/C++文件中的注释(c实现)
- C++删除文件夹及其子文件夹中的文件功能实现(Unicode)
- C++实现的 如何删除一个指定的文件
- 删除c 或 c++源文件注释程序(c++实现)
- VC实现批量删除指定文件的方法
- Python 实现文件复制、删除
- 在C++中如何实现文件的读写?
- 使用XML读写删除功能来实现资源文件配置
- 人脸识别CSV文件(c++实现)
- BMP文件学习笔记(一): C/C++语言实现.bmp文件读写
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- Linux系统服务 6 ---- vsftpd服务的配置文件实现匿名登录上传下载和删除功能
- Thinkphp 实现多文件上传(包含html增加和删除控件)
- linux实现除了某个文件或某个文件夹以外的全部删除