例如:我要删除d:\cd\下的所有文件和子目录
13 个解决方案
#1
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
#2
递归算法,逐个文件夹删除
#3
afantict(巴依老爷):典型的深度优先遍历,
#4
在下的是原创
删除文件夹和文件
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
删除文件夹和文件
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
#5
sorry!
是我依照别的程序改装的.
如果我的这段程序可以.
请给
afantict(巴依老爷) ( ) 信誉:71
19 分
给我一分
大家来是相互学习的
分其实并不重要
OK?
是我依照别的程序改装的.
如果我的这段程序可以.
请给
afantict(巴依老爷) ( ) 信誉:71
19 分
给我一分
大家来是相互学习的
分其实并不重要
OK?
#6
转载有理!
转载有分!
转载有分!
#7
真的?
#8
晚了N步,不过也贴一下。 :)
void DeleteFile(const char *strDirectory,const char *strFilter,bool bDelteSubDir)
{
WIN32_FIND_DATA FindFileData;
DWORD dwFA;
HANDLE hFind;
BOOL bFind;
char strFileName[1024];
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,strFilter);
memset(&FindFileData,0x0,sizeof(FindFileData));
hFind = ::FindFirstFile(strFileName,&FindFileData);
if ( hFind==INVALID_HANDLE_VALUE )
return;
do
{
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,FindFileData.cFileName);
dwFA = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if ( dwFA==FILE_ATTRIBUTE_DIRECTORY )
{
if ( strcmp(FindFileData.cFileName,".")==0
|| strcmp(FindFileData.cFileName,"..")==0 )
{
// do nothing.
}
else
{
if ( bDelteSubDir )
{
strcat(strFileName,"\\");
DeleteFile(strFileName,strFilter,bDelteSubDir);
}
}
}
else
{
::DeleteFile(strFileName);
}
memset(&FindFileData,0x0,sizeof(FindFileData));
bFind = ::FindNextFile(hFind,&FindFileData);
} while ( bFind );
}
void DeleteFile(const char *strDirectory,const char *strFilter,bool bDelteSubDir)
{
WIN32_FIND_DATA FindFileData;
DWORD dwFA;
HANDLE hFind;
BOOL bFind;
char strFileName[1024];
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,strFilter);
memset(&FindFileData,0x0,sizeof(FindFileData));
hFind = ::FindFirstFile(strFileName,&FindFileData);
if ( hFind==INVALID_HANDLE_VALUE )
return;
do
{
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,FindFileData.cFileName);
dwFA = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if ( dwFA==FILE_ATTRIBUTE_DIRECTORY )
{
if ( strcmp(FindFileData.cFileName,".")==0
|| strcmp(FindFileData.cFileName,"..")==0 )
{
// do nothing.
}
else
{
if ( bDelteSubDir )
{
strcat(strFileName,"\\");
DeleteFile(strFileName,strFilter,bDelteSubDir);
}
}
}
else
{
::DeleteFile(strFileName);
}
memset(&FindFileData,0x0,sizeof(FindFileData));
bFind = ::FindNextFile(hFind,&FindFileData);
} while ( bFind );
}
#9
怎么弄得这么认真
我是看 he_zhidan(何志丹:壮志在我心) 昨天还是今天回的一个贴子
当时我也参与哪个问题了
所以刚才马上就找到了
给拷过来了
随便贴贴而已
干吗这么认真
还有版权吗?
代码写得很好
我是看 he_zhidan(何志丹:壮志在我心) 昨天还是今天回的一个贴子
当时我也参与哪个问题了
所以刚才马上就找到了
给拷过来了
随便贴贴而已
干吗这么认真
还有版权吗?
代码写得很好
#10
我的意思是支持你转
大家本来就是相互学习
大家本来就是相互学习
#11
对
大将就应该有大将气度
俺特别佩服星级大侠
你现在多少分啊
大将就应该有大将气度
俺特别佩服星级大侠
你现在多少分啊
#12
新的思路 用SHFileOperation
#13
我也来晚了,还是贴出来吧,我用的mfc的CFindFile类作的,
BOOL DeleteDirectory(char* DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
return TRUE;
}
BOOL DeleteDirectory(char* DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
return TRUE;
}
#1
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
#2
递归算法,逐个文件夹删除
#3
afantict(巴依老爷):典型的深度优先遍历,
#4
在下的是原创
删除文件夹和文件
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
删除文件夹和文件
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
#5
sorry!
是我依照别的程序改装的.
如果我的这段程序可以.
请给
afantict(巴依老爷) ( ) 信誉:71
19 分
给我一分
大家来是相互学习的
分其实并不重要
OK?
是我依照别的程序改装的.
如果我的这段程序可以.
请给
afantict(巴依老爷) ( ) 信誉:71
19 分
给我一分
大家来是相互学习的
分其实并不重要
OK?
#6
转载有理!
转载有分!
转载有分!
#7
真的?
#8
晚了N步,不过也贴一下。 :)
void DeleteFile(const char *strDirectory,const char *strFilter,bool bDelteSubDir)
{
WIN32_FIND_DATA FindFileData;
DWORD dwFA;
HANDLE hFind;
BOOL bFind;
char strFileName[1024];
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,strFilter);
memset(&FindFileData,0x0,sizeof(FindFileData));
hFind = ::FindFirstFile(strFileName,&FindFileData);
if ( hFind==INVALID_HANDLE_VALUE )
return;
do
{
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,FindFileData.cFileName);
dwFA = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if ( dwFA==FILE_ATTRIBUTE_DIRECTORY )
{
if ( strcmp(FindFileData.cFileName,".")==0
|| strcmp(FindFileData.cFileName,"..")==0 )
{
// do nothing.
}
else
{
if ( bDelteSubDir )
{
strcat(strFileName,"\\");
DeleteFile(strFileName,strFilter,bDelteSubDir);
}
}
}
else
{
::DeleteFile(strFileName);
}
memset(&FindFileData,0x0,sizeof(FindFileData));
bFind = ::FindNextFile(hFind,&FindFileData);
} while ( bFind );
}
void DeleteFile(const char *strDirectory,const char *strFilter,bool bDelteSubDir)
{
WIN32_FIND_DATA FindFileData;
DWORD dwFA;
HANDLE hFind;
BOOL bFind;
char strFileName[1024];
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,strFilter);
memset(&FindFileData,0x0,sizeof(FindFileData));
hFind = ::FindFirstFile(strFileName,&FindFileData);
if ( hFind==INVALID_HANDLE_VALUE )
return;
do
{
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,FindFileData.cFileName);
dwFA = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if ( dwFA==FILE_ATTRIBUTE_DIRECTORY )
{
if ( strcmp(FindFileData.cFileName,".")==0
|| strcmp(FindFileData.cFileName,"..")==0 )
{
// do nothing.
}
else
{
if ( bDelteSubDir )
{
strcat(strFileName,"\\");
DeleteFile(strFileName,strFilter,bDelteSubDir);
}
}
}
else
{
::DeleteFile(strFileName);
}
memset(&FindFileData,0x0,sizeof(FindFileData));
bFind = ::FindNextFile(hFind,&FindFileData);
} while ( bFind );
}
#9
怎么弄得这么认真
我是看 he_zhidan(何志丹:壮志在我心) 昨天还是今天回的一个贴子
当时我也参与哪个问题了
所以刚才马上就找到了
给拷过来了
随便贴贴而已
干吗这么认真
还有版权吗?
代码写得很好
我是看 he_zhidan(何志丹:壮志在我心) 昨天还是今天回的一个贴子
当时我也参与哪个问题了
所以刚才马上就找到了
给拷过来了
随便贴贴而已
干吗这么认真
还有版权吗?
代码写得很好
#10
我的意思是支持你转
大家本来就是相互学习
大家本来就是相互学习
#11
对
大将就应该有大将气度
俺特别佩服星级大侠
你现在多少分啊
大将就应该有大将气度
俺特别佩服星级大侠
你现在多少分啊
#12
新的思路 用SHFileOperation
#13
我也来晚了,还是贴出来吧,我用的mfc的CFindFile类作的,
BOOL DeleteDirectory(char* DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
return TRUE;
}
BOOL DeleteDirectory(char* DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
return TRUE;
}