8 个解决方案
#1
关注此题!
#2
RemoveDir()
#3
先用遍历删除目录下的所有文件,再用RemoveDir()删除文件夹
#4
BOOL DeleteFile(LPCTSTR lpszFileName);
//lpszFileName是你要删除的文件或目录,调用成功返回TRUE,否则返回FALSE;
//如:DeleteFile("c:\\aaa.exe");
//lpszFileName是你要删除的文件或目录,调用成功返回TRUE,否则返回FALSE;
//如:DeleteFile("c:\\aaa.exe");
#5
使用SHFileOperatoin函数
#6
试试下面这个函数吧
unsigned int BatDelete(AnsiString srcDir)
{
if (srcDir=="") return 0;
static files=0;
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
AnsiString SrcDir=srcDir+"*.*";
AnsiString fName="";
BOOL fFinished = FALSE;
hSearch = FindFirstFile((srcDir+"*.*").c_str(), &FileData);
while (!fFinished)
{
fName=FileData.cFileName ;
bool flag=true;
if (fName=="."||fName=="..") flag=false;
int atr=FileData.dwFileAttributes &faDirectory;
if (flag&&atr==faDirectory)
{
AnsiString tDir=destDir;
if (*tDir.AnsiLastChar()!='\\') tDir+='\\';
tDir+=fName ;
char ch=*tDir.AnsiLastChar();
if (ch!='\\') tDir+="\\";
AnsiString sDir=srcDir+fName;
ch=*sDir.AnsiLastChar();
if (ch!='\\') sDir+="\\";
BatDelete (srcDir+fName+"\\", tDir);
}
else if (flag)
{
Application->ProcessMessages();
ShowInfo(srcDir+fName );
AnsiString srcFile=srcDir+fName ;
if(!SetFileAttributes(srcFile.c_str(),FILE_ATTRIBUTE_NORMAL)) ShowMessage("无法更改文件属性:"+srcFile);
if (!DeleteFile(srcFile)) ShowMessage("无法删除文件:"+srcFile);
}
}
//搜索下一个文件
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
//MessageBox(NULL, "No more files.","Search completed.", MB_OK);
fFinished = TRUE;
}
}
}
if (!FindClose(hSearch))
{
ShowMessage("无法关闭文件!");
}
return files;
}
unsigned int BatDelete(AnsiString srcDir)
{
if (srcDir=="") return 0;
static files=0;
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
AnsiString SrcDir=srcDir+"*.*";
AnsiString fName="";
BOOL fFinished = FALSE;
hSearch = FindFirstFile((srcDir+"*.*").c_str(), &FileData);
while (!fFinished)
{
fName=FileData.cFileName ;
bool flag=true;
if (fName=="."||fName=="..") flag=false;
int atr=FileData.dwFileAttributes &faDirectory;
if (flag&&atr==faDirectory)
{
AnsiString tDir=destDir;
if (*tDir.AnsiLastChar()!='\\') tDir+='\\';
tDir+=fName ;
char ch=*tDir.AnsiLastChar();
if (ch!='\\') tDir+="\\";
AnsiString sDir=srcDir+fName;
ch=*sDir.AnsiLastChar();
if (ch!='\\') sDir+="\\";
BatDelete (srcDir+fName+"\\", tDir);
}
else if (flag)
{
Application->ProcessMessages();
ShowInfo(srcDir+fName );
AnsiString srcFile=srcDir+fName ;
if(!SetFileAttributes(srcFile.c_str(),FILE_ATTRIBUTE_NORMAL)) ShowMessage("无法更改文件属性:"+srcFile);
if (!DeleteFile(srcFile)) ShowMessage("无法删除文件:"+srcFile);
}
}
//搜索下一个文件
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
//MessageBox(NULL, "No more files.","Search completed.", MB_OK);
fFinished = TRUE;
}
}
}
if (!FindClose(hSearch))
{
ShowMessage("无法关闭文件!");
}
return files;
}
#7
这个函数前几天我贴过一次,试试吧。
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 __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;
}
#8
谢谢各位
#1
关注此题!
#2
RemoveDir()
#3
先用遍历删除目录下的所有文件,再用RemoveDir()删除文件夹
#4
BOOL DeleteFile(LPCTSTR lpszFileName);
//lpszFileName是你要删除的文件或目录,调用成功返回TRUE,否则返回FALSE;
//如:DeleteFile("c:\\aaa.exe");
//lpszFileName是你要删除的文件或目录,调用成功返回TRUE,否则返回FALSE;
//如:DeleteFile("c:\\aaa.exe");
#5
使用SHFileOperatoin函数
#6
试试下面这个函数吧
unsigned int BatDelete(AnsiString srcDir)
{
if (srcDir=="") return 0;
static files=0;
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
AnsiString SrcDir=srcDir+"*.*";
AnsiString fName="";
BOOL fFinished = FALSE;
hSearch = FindFirstFile((srcDir+"*.*").c_str(), &FileData);
while (!fFinished)
{
fName=FileData.cFileName ;
bool flag=true;
if (fName=="."||fName=="..") flag=false;
int atr=FileData.dwFileAttributes &faDirectory;
if (flag&&atr==faDirectory)
{
AnsiString tDir=destDir;
if (*tDir.AnsiLastChar()!='\\') tDir+='\\';
tDir+=fName ;
char ch=*tDir.AnsiLastChar();
if (ch!='\\') tDir+="\\";
AnsiString sDir=srcDir+fName;
ch=*sDir.AnsiLastChar();
if (ch!='\\') sDir+="\\";
BatDelete (srcDir+fName+"\\", tDir);
}
else if (flag)
{
Application->ProcessMessages();
ShowInfo(srcDir+fName );
AnsiString srcFile=srcDir+fName ;
if(!SetFileAttributes(srcFile.c_str(),FILE_ATTRIBUTE_NORMAL)) ShowMessage("无法更改文件属性:"+srcFile);
if (!DeleteFile(srcFile)) ShowMessage("无法删除文件:"+srcFile);
}
}
//搜索下一个文件
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
//MessageBox(NULL, "No more files.","Search completed.", MB_OK);
fFinished = TRUE;
}
}
}
if (!FindClose(hSearch))
{
ShowMessage("无法关闭文件!");
}
return files;
}
unsigned int BatDelete(AnsiString srcDir)
{
if (srcDir=="") return 0;
static files=0;
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
AnsiString SrcDir=srcDir+"*.*";
AnsiString fName="";
BOOL fFinished = FALSE;
hSearch = FindFirstFile((srcDir+"*.*").c_str(), &FileData);
while (!fFinished)
{
fName=FileData.cFileName ;
bool flag=true;
if (fName=="."||fName=="..") flag=false;
int atr=FileData.dwFileAttributes &faDirectory;
if (flag&&atr==faDirectory)
{
AnsiString tDir=destDir;
if (*tDir.AnsiLastChar()!='\\') tDir+='\\';
tDir+=fName ;
char ch=*tDir.AnsiLastChar();
if (ch!='\\') tDir+="\\";
AnsiString sDir=srcDir+fName;
ch=*sDir.AnsiLastChar();
if (ch!='\\') sDir+="\\";
BatDelete (srcDir+fName+"\\", tDir);
}
else if (flag)
{
Application->ProcessMessages();
ShowInfo(srcDir+fName );
AnsiString srcFile=srcDir+fName ;
if(!SetFileAttributes(srcFile.c_str(),FILE_ATTRIBUTE_NORMAL)) ShowMessage("无法更改文件属性:"+srcFile);
if (!DeleteFile(srcFile)) ShowMessage("无法删除文件:"+srcFile);
}
}
//搜索下一个文件
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
//MessageBox(NULL, "No more files.","Search completed.", MB_OK);
fFinished = TRUE;
}
}
}
if (!FindClose(hSearch))
{
ShowMessage("无法关闭文件!");
}
return files;
}
#7
这个函数前几天我贴过一次,试试吧。
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 __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;
}
#8
谢谢各位