DeleteFile() 删除出错,...~~

来源:百度知道 编辑:UC知道 时间:2024/09/25 14:15:26
编了个函数 delete_Dir(), 想删除指定目录 (“dir”)下所有 以“.dcm”为后缀的所有文件,但每次删除文件加
夹内的 N个文件时,都只能删除前 N-1个,第N个文件(即: 最后一个)总不能删掉(GetLastError() 函数 返回代码 “32”,但当时该文件 因该不在使用中啊)...郁闷中

//代码 有时间的话 帮我看下 万分感谢
void delete_TempDir(char * dir){ //dir 目录 char * 型 需装换成 TCHAR *
TCHAR TempFile[MAX_PATH];
TCHAR TempDir[MAX_PATH];
WIN32_FIND_DATA ffd;
memset(&ffd, 0, sizeof(WIN32_FIND_DATA));

int size = strlen(dir);
mbstowcs(TempDir, dir, size+1); // char * to TCHAR *

_stprintf(TempFile,_T("%s\\*.dcm"),TempDir);
HANDLE hFindFile = FindFirstFile(TempFile, &ffd);
while(_tcslen(ffd.cFileName)){

_stprintf(TempFile,_T("%s\\%s"),TempDir,ffd.cFileName);

SetFileAttributes(TempFile,FILE_ATTRIBUTE_ARCHIVE);// 去掉只读 属性 前面应当先判断下

if(FindNextFile(hFindFile, &ffd) == FALSE)
break;
}
FindClose(hFindFile);
RemoveDirectory(TempDir); // del

1. 怎么看不见程序里有 DeleteFile()?
2. 我使用FindFirstFile和FindNext的习惯是:
hFindFile = FindFirstFile(TempFile,&ffd); //找第一个
构造文件全名;
DeleteFile(文件全名); //删除第一个
while (FindNextFile(hFindFile,&ffd)) //只要还有
{
构造文件全名;
DeleteFile(文件全名); //就删除它
}
FindClose(hFindFile);
但看了你的提问很受启发,比我原来的习惯好的多。以后我会改用这个写法。
下面是我写的删除path下扩展名委extension的C函数DelFiles(), 这里直接用char *没问题, 供参考。C++ 也可以用, 但除include windows.h 外还要include stdio.h.

void DelFiles(char *path, char *extension)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
char fname[MAX_PATH];
sprintf(fname, "%s\\*.%s", path, extension);
hFind = FindFirstFile(fname, &fd);
if (hFind) {
do {
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) //如果是目录就不做了
{
sprintf(fname, "%s\\%s", path, fd.cFileName);
if (DeleteFile