请问删除目录中的文件(包括子目录)的函数是什么?

dirdir 2001-02-10 08:11:00
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edward 2001-02-11
  • 打赏
  • 举报
回复
FileFinder.h
============
// FileFinder.h: interface for the CFileFinder class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FILEFINDER_H__E48F52E6_34DA_11D4_A56C_5254AB136A75__INCLUDED_)
#define AFX_FILEFINDER_H__E48F52E6_34DA_11D4_A56C_5254AB136A75__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

typedef BOOL (FILEFINDER_CALLBACK_FUNCTION)(LPCTSTR lpszBase, LPWIN32_FIND_DATA lpFindFileData);

class CFileFinder
{
public:
BOOL Start(LPCTSTR lpszBase, LPCTSTR lpszPattern, FILEFINDER_CALLBACK_FUNCTION *pfnCallBack);
CFileFinder();
virtual ~CFileFinder();

};

#endif // !defined(AFX_FILEFINDER_H__E48F52E6_34DA_11D4_A56C_5254AB136A75__INCLUDED_)

FileFinder.cpp
==============
// FileFinder.cpp: implementation of the CFileFinder class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FileFinder.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

BOOL CreatePattern(LPCTSTR lpszBase, LPCTSTR lpszPattern, LPTSTR lpszBuffer, DWORD cchBufLen, LPDWORD lpcchBuffer);

CFileFinder::CFileFinder()
{

}

CFileFinder::~CFileFinder()
{

}

BOOL CFileFinder::Start(LPCTSTR lpszBase, LPCTSTR lpszPattern, FILEFINDER_CALLBACK_FUNCTION *pfnCallBack)
{
WIN32_FIND_DATA structFindFileData;
HANDLE hFileFind;
TCHAR szBuffer[MAX_PATH];
DWORD cchNeeded;
int bHasError;

if(!CreatePattern(lpszBase, lpszPattern, szBuffer, MAX_PATH, &cchNeeded))
return FALSE;
//MessageBox(NULL, szBuffer, _T("CFileFinder"), MB_OK);
hFileFind = FindFirstFile(szBuffer, &structFindFileData);
if(hFileFind == INVALID_HANDLE_VALUE)
return FALSE;
bHasError = 0;
do
{
if(!pfnCallBack(lpszBase, &structFindFileData))
bHasError++;
}while(FindNextFile(hFileFind, &structFindFileData));
FindClose(hFileFind);

return bHasError == 0;
}

相关函数:
========
BOOL DeleteFolderFilesAndSubDirs(LPCTSTR lpszFolder)
{
CFileFinder fileFinder;

return fileFinder.Start(lpszFolder, _T("*.*"), DeleteFolderFilesAndSubDirsCallBack);
}

BOOL DeleteFolderFilesAndSubDirsCallBack
(
LPCTSTR lpszBase, LPWIN32_FIND_DATA lpFindFileData
)
{
int bHasError;
DWORD cchNeeded;
TCHAR szPathName[MAX_PATH];

if(IsDots(lpFindFileData->cFileName))
return TRUE;

bHasError = 0;
if(!PathCat(lpszBase, lpFindFileData->cFileName, szPathName, MAX_PATH, &cchNeeded))
return FALSE;
logFile.WriteLine(szPathName);
if(lpFindFileData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(!DeleteFolderFilesAndSubDirs(szPathName))
{
logFile.WriteText(_T("Cannot delete folder files and subdirs of "));
logFile.WriteLine(szPathName);
bHasError++;
}
if(!RemoveDirectory(szPathName))
{
logFile.WriteText(_T("Cannot delete folder "));
logFile.WriteLine(szPathName);
bHasError++;
::MessageBeep((UINT)-1);
}
}
else
{
if(!RemoveFile(szPathName))
{
bHasError++;
logFile.WriteText(_T("Cannot delete file "));
logFile.WriteLine(szPathName);
::MessageBeep((UINT)-1);
}
}
return bHasError == 0;
}

BOOL CreatePattern(LPCTSTR lpszBase, LPCTSTR lpszPattern, LPTSTR lpszBuffer, DWORD cchBufLen, LPDWORD pcchNeeded)
{
return PathCat(lpszBase, lpszPattern, lpszBuffer, cchBufLen, pcchNeeded);
}

BOOL IsDots(LPCTSTR lpszFileName)
{
if(lpszFileName[0] == _T('.'))
return TRUE;
if(_tcscmp(lpszFileName, _T("..")) == 0)
return TRUE;
return FALSE;
}

BOOL PathCat(LPCTSTR lpszBase, LPCTSTR lpszSub, LPTSTR lpszBuffer, DWORD cchBufLen, LPDWORD pcchNeeded)
{
size_t cchBase;
size_t cchSub;
size_t cchNeeded;
TCHAR tchar;

cchBase = _tcslen(lpszBase);
cchSub = _tcslen(lpszSub);
cchNeeded = cchBase + cchSub + 1;
if(cchBufLen < cchNeeded)
{
*pcchNeeded = cchNeeded;
lpszBuffer[0] = _T('\0');
return FALSE;
}
_tcscpy(lpszBuffer, lpszBase);
tchar = lpszBuffer[cchBase - 1];
if(tchar != _T('\\') && tchar != _T('/'))
{
lpszBuffer[cchBase] = _T('\\');
lpszBuffer[cchBase + 1] = 0;
}
_tcscat(lpszBuffer, lpszSub);
return TRUE;
}

BOOL RemoveFile(LPCTSTR lpszPathName)
{
::SetFileAttributes(lpszPathName, FILE_ATTRIBUTE_NORMAL);
return ::DeleteFile(lpszPathName);
}
随风bj 2001-02-11
  • 打赏
  • 举报
回复
用WinExec,然后用deletetree xxx/y
lumg 2001-02-11
  • 打赏
  • 举报
回复
没有直接的删除目录中的文件(包括子目录)的函数,只有删除当前目录下的指定文件,但可以自已写一个
ladofwind 2001-02-10
  • 打赏
  • 举报
回复
Public Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧