哪个帮小弟我改下这个测试程序啊是一个删除非空目录的函数.小弟我都搞了几个小时了.郁闷.多谢
哪个帮我改下这个测试程序啊,是一个删除非空目录的函数.我都搞了几个小时了.郁闷.谢谢啊
#include <stdio.h>
#include <windows.h>
BOOL DeleteDirectory(LPCTSTR strDes);
int main()
{
char dirname[]= "D:\\aa ";
DeleteDirectory(dirname);
return 0;
}
BOOL DeleteDirectory(LPCTSTR strDes)
{
HANDLE hff;
WIN32_FIND_DATA fd;
BOOL fMoreFiles=TRUE;
char strTemp[256];
strcpy(strTemp,strDes);
strcat(strTemp, "\\*.* ");
hff=FindFirstFile(strTemp,&fd);
if (hff==INVALID_HANDLE_VALUE)
fMoreFiles=FALSE;
while(fMoreFiles)
{
strcpy(strTemp,strDes);
strcat(strcat(strTemp, "\\ "),fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
DeleteDirectory(strTemp);
else
DeleteFile(strTemp);
fMoreFiles=FindNextFile(hff,&fd);
}
FindClose(hff);
return RemoveDirectory(strDes);
}
请帮我改下这个函数啊.谢谢啊
------解决方案--------------------
给你改了下,我机上运行没问题。
#include <stdio.h>
#include <windows.h>
BOOL DeleteDirectory(LPCTSTR strDes);
int main()
{
char dirname[]= "D:\\aa ";
DeleteDirectory(dirname);
return 0;
}
BOOL DeleteDirectory(LPCTSTR strDes)
{
HANDLE hff;
WIN32_FIND_DATA fd;
BOOL fMoreFiles=TRUE;
char strTemp[256];
strcpy(strTemp,strDes);
strcat(strTemp, "\\*.* ");
hff=FindFirstFile(strTemp,&fd);
if (hff==INVALID_HANDLE_VALUE)
fMoreFiles=FALSE;
while(fMoreFiles)
{
/*注意这个地方的两句是多于的,成序使用得是递归搜索,所以只要在前面加就可以了*/
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) DeleteDirectory(strTemp);
else
DeleteFile(strTemp);
fMoreFiles=FindNextFile(hff,&fd);
}
FindClose(hff);
return RemoveDirectory(strDes);
}
------解决方案--------------------
给你个例子看
//使用API方式实现删除不为空的目录
bool deleteDirectory(const char* pszDir)
{
WIN32_FIND_DATA fd;
char szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
sprintf(szTempFileFind, "%s\\*.* ", pszDir);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if (hFind == INVALID_HANDLE_VALUE)
return false;
while (!bIsFinish) {
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ". ") != 0) && (strcmp(fd.cFileName, ".. ") != 0)) {
char szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
char szTempDir[MAX_PATH] = { 0 };
sprintf(szTempDir, "%s\\%s ", pszDir, szFoundFileName);
deleteDirectory(szTempDir);
}
else {
char szTempFileName[MAX_PATH] = { 0 };
sprintf(szTempFileName, "%s\\%s ", pszDir, szFoundFileName);
DeleteFile(szTempFileName);
}
}
}
FindClose(hFind);
if (!RemoveDirectory(pszDir))
return false;
return true;
}
#include <stdio.h>
#include <windows.h>
BOOL DeleteDirectory(LPCTSTR strDes);
int main()
{
char dirname[]= "D:\\aa ";
DeleteDirectory(dirname);
return 0;
}
BOOL DeleteDirectory(LPCTSTR strDes)
{
HANDLE hff;
WIN32_FIND_DATA fd;
BOOL fMoreFiles=TRUE;
char strTemp[256];
strcpy(strTemp,strDes);
strcat(strTemp, "\\*.* ");
hff=FindFirstFile(strTemp,&fd);
if (hff==INVALID_HANDLE_VALUE)
fMoreFiles=FALSE;
while(fMoreFiles)
{
strcpy(strTemp,strDes);
strcat(strcat(strTemp, "\\ "),fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
DeleteDirectory(strTemp);
else
DeleteFile(strTemp);
fMoreFiles=FindNextFile(hff,&fd);
}
FindClose(hff);
return RemoveDirectory(strDes);
}
请帮我改下这个函数啊.谢谢啊
------解决方案--------------------
给你改了下,我机上运行没问题。
#include <stdio.h>
#include <windows.h>
BOOL DeleteDirectory(LPCTSTR strDes);
int main()
{
char dirname[]= "D:\\aa ";
DeleteDirectory(dirname);
return 0;
}
BOOL DeleteDirectory(LPCTSTR strDes)
{
HANDLE hff;
WIN32_FIND_DATA fd;
BOOL fMoreFiles=TRUE;
char strTemp[256];
strcpy(strTemp,strDes);
strcat(strTemp, "\\*.* ");
hff=FindFirstFile(strTemp,&fd);
if (hff==INVALID_HANDLE_VALUE)
fMoreFiles=FALSE;
while(fMoreFiles)
{
/*注意这个地方的两句是多于的,成序使用得是递归搜索,所以只要在前面加就可以了*/
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) DeleteDirectory(strTemp);
else
DeleteFile(strTemp);
fMoreFiles=FindNextFile(hff,&fd);
}
FindClose(hff);
return RemoveDirectory(strDes);
}
------解决方案--------------------
给你个例子看
//使用API方式实现删除不为空的目录
bool deleteDirectory(const char* pszDir)
{
WIN32_FIND_DATA fd;
char szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
sprintf(szTempFileFind, "%s\\*.* ", pszDir);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if (hFind == INVALID_HANDLE_VALUE)
return false;
while (!bIsFinish) {
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ". ") != 0) && (strcmp(fd.cFileName, ".. ") != 0)) {
char szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
char szTempDir[MAX_PATH] = { 0 };
sprintf(szTempDir, "%s\\%s ", pszDir, szFoundFileName);
deleteDirectory(szTempDir);
}
else {
char szTempFileName[MAX_PATH] = { 0 };
sprintf(szTempFileName, "%s\\%s ", pszDir, szFoundFileName);
DeleteFile(szTempFileName);
}
}
}
FindClose(hFind);
if (!RemoveDirectory(pszDir))
return false;
return true;
}