封装删除文件夹及文件类(包括删除指定文件夹及按过快期时间删除文件及文件夹)
2010-12-24 13:17
369 查看
删除文件夹及其所包含的所有子文件:
1.遍历指定文件夹下所有的文件,按递归方法删除子文件及文件夹。
2.删除过期文件,则是在1思路上去比对过期时间与文件修改时间,如果文件修改时间在过期时间之前,则删除.
头文件FileOperator.h :
源文件FileOperator.c :
1.遍历指定文件夹下所有的文件,按递归方法删除子文件及文件夹。
2.删除过期文件,则是在1思路上去比对过期时间与文件修改时间,如果文件修改时间在过期时间之前,则删除.
头文件FileOperator.h :
#ifndef __FILE_OPERATOR_H #define __FILE_OPERATOR_H ////////////////////////////////////////////////////////////////////////// #include <windows.h> ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// class CFileOperator { public: CFileOperator(); virtual ~CFileOperator(); BOOL RemoveFileByDate(const char* pszDir, struct tm& tmRemove); //按时间删除过期文件 BOOL ExitDirectory(const char* pszDir); //判断文件夹是否存在 BOOL RemoveFilesInDirectory( const char* pszDirectory ); //删除指定文件夹下所有文件 BOOL RemoveOnlyDirectory( const char* pszDirectory ); //删除空文件夹 BOOL RemoveFile(const char* pszDirName, const char* pszFileName); //删除单个文件 protected: void SystemTimeTotm(SYSTEMTIME& sysTime, struct tm& tmTime); //时间转换 BOOL IsBeforRemoveData(struct tm& tmFile, struct tm& tmRemove); //时间比较 private: }; ////////////////////////////////////////////////////////////////////////// #endif//__FILE_OPERATOR_H
源文件FileOperator.c :
#include <stdio.h> #include <time.h> #include "FileOperator.h" ////////////////////////////////////////////////////////////////////////// CFileOperator::CFileOperator() { } CFileOperator::~CFileOperator() { } //判断文件夹是否存在 BOOL CFileOperator::ExitDirectory(const char* pszDir) { DWORD dwRet = GetFileAttributes(pszDir); if ( dwRet == 0xFFFFFFFF ) return FALSE; return ( FILE_ATTRIBUTE_DIRECTORY & GetFileAttributes(pszDir) ); } //按时间删除过期文件,先逐个删除文件下所有的子文件后再删除空文件夹 BOOL CFileOperator::RemoveFileByDate(const char* pszDirectory, struct tm& tmRemove) { char szDelFilePath[MAX_PATH]; char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; SYSTEMTIME FileModifyTime; struct tm tmFileModify; memset(&FileModifyTime, 0, sizeof(FileModifyTime)); memset(&tmFileModify, 0, sizeof(tmFileModify)); strcpy(szFind,pszDirectory); strcat(szFind,"//*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return 0; while(1) { ::SetFileAttributes( FindFileData.cFileName,FindFileData.dwFileAttributes & (~FILE_ATTRIBUTE_READONLY) ); FileTimeToSystemTime( &FindFileData.ftLastWriteTime, &FileModifyTime ); SystemTimeTotm( FileModifyTime, tmFileModify ); if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {//如果是文件夹,直接跳过 if( ( stricmp( FindFileData.cFileName, "." ) !=0 ) && ( stricmp( FindFileData.cFileName, ".." ) !=0 ) ) { if ( IsBeforRemoveData(tmFileModify, tmRemove) ) {//要删除的过期文件夹 sprintf(szDelFilePath,"%s//%s",pszDirectory,FindFileData.cFileName); RemoveFileByDate(szDelFilePath, tmRemove); RemoveOnlyDirectory(szDelFilePath); } } } else { if ( IsBeforRemoveData(tmFileModify, tmRemove) ) {//要删除的过期文件 RemoveFile(pszDirectory, FindFileData.cFileName); } } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); // RemoveOnlyDirectory(pszDirectory); return TRUE; } //删除指定文件夹下所有文件 BOOL CFileOperator::RemoveFilesInDirectory( const char* pszDirectory) { char szDelFilePath[MAX_PATH]; char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,pszDirectory); strcat(szFind,"//*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return 0; while(1) { ::SetFileAttributes( FindFileData.cFileName,FindFileData.dwFileAttributes & (~FILE_ATTRIBUTE_READONLY) ); if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {//如果是文件夹,直接跳过 if( ( stricmp( FindFileData.cFileName, "." ) !=0 ) && ( stricmp( FindFileData.cFileName, ".." ) !=0 ) ) { sprintf(szDelFilePath,"%s//%s",pszDirectory,FindFileData.cFileName); RemoveFilesInDirectory(szDelFilePath); RemoveOnlyDirectory(szDelFilePath); } } else { RemoveFile(pszDirectory, FindFileData.cFileName); } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); // RemoveOnlyDirectory(pszDirectory); return TRUE; } //删除空文件夹 BOOL CFileOperator::RemoveOnlyDirectory( const char* pszDirectory ) { ::SetFileAttributes( pszDirectory,FILE_ATTRIBUTE_ARCHIVE ); if ( !::RemoveDirectory(pszDirectory) ) { DWORD dwErr = GetLastError(); return FALSE; } return TRUE; } //删除单个文件 BOOL CFileOperator::RemoveFile(const char* pszDirName, const char* pszFileName) { char szFilePath[256] = ""; sprintf(szFilePath, "%s//%s", pszDirName,pszFileName); ::SetFileAttributes( szFilePath, FILE_ATTRIBUTE_ARCHIVE ); return ::DeleteFile(szFilePath); } ////时间转换 void CFileOperator::SystemTimeTotm(SYSTEMTIME& sysTime, struct tm& tmTime) { tmTime.tm_year = sysTime.wYear - 1900; tmTime.tm_mon = sysTime.wMonth - 1; tmTime.tm_mday = sysTime.wDay; tmTime.tm_hour = sysTime.wHour; tmTime.tm_min = sysTime.wMinute; tmTime.tm_sec = sysTime.wSecond; tmTime.tm_wday = sysTime.wDayOfWeek; } //时间比较 BOOL CFileOperator::IsBeforRemoveData(struct tm& tmFile, struct tm& tmRemove) { if ( tmFile.tm_year < tmRemove.tm_year ) return TRUE; if ( tmFile.tm_mon < tmRemove.tm_mon ) return TRUE; if ( tmFile.tm_mday < tmRemove.tm_mday ) return TRUE; if ( tmFile.tm_hour < tmRemove.tm_hour ) return TRUE; if ( tmFile.tm_min < tmRemove.tm_min ) return TRUE; if ( tmFile.tm_sec < tmRemove.tm_sec ) return TRUE; return FALSE; }
相关文章推荐
- 删除指定时间前目录下生成的所有文件、文件夹
- perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除
- 删除指定文件夹中除保留的文件外的所有文件批处理 删除指定文件夹下的空文件夹,包括子目录批处理
- 删除指定文件夹内创建时间24小时之外的所有文件
- 遍历一个文件夹,删除指定数量多余时间最久的文件
- java删除指定路径下所有的文件, 及该文件夹里的所有文件夹,不包括该文件夹
- linux按指定时间删除文件和文件夹
- 删除指定文件夹下所有文件(包括子文件夹及子文件夹下的所有文件)
- qt删除指定文件夹下所有内容,包括文件夹、文件
- 删除指定的文件夹(包括其中的所有文件)
- java 删除指定文件夹 以及文件下下面的所有文件
- Python批量删除指定文件夹下的指定类型的文件
- C#小方法- IO:删除文件夹下指定名字的文件
- C#删除指定文件、文件夹
- Android 删除SD卡一个指定文件夹和其下的所有文件
- 删除文件/文件夹时,报错“指定的文件名无效或太长”的解决办法
- shell脚本删除指定目录下超过指定时间的文件
- php删除指定文件/获取文件夹的所有文件名
- (java)根据文件修改时间,判断是否为当天文件,如果不是则删除文件夹内文件
- Mayi_windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat