vc 文件及文件夹处理
来源:互联网 发布:系统管理员数据流程图 编辑:程序博客网 时间:2024/05/21 14:57
1.删除非空目录
//删除文件夹目录(非空)
bool DeleteDirectory(char* sDirName)
{
CFileFind tempFind;
char sTempFileFind[200] ;
sprintf(sTempFileFind,"%s/*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char sFoundFileName[200];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
if (tempFind.IsDirectory())
{
char sTempDir[200];
sprintf(sTempDir,"%s/%s",sDirName,sFoundFileName);
DeleteDirectory(sTempDir); //先删除文件夹下边的所有文件
}
else
{
char sTempFileName[200];
sprintf(sTempFileName,"%s/%s",sDirName,sFoundFileName);
DeleteFile(sTempFileName); //将该文件夹删除
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
2. 文件拷贝
void FileCopyTo(CString source, CString destination, CString searchStr, BOOL cover = TRUE)
{
CString strSourcePath = source;
CString strDesPath = destination;
CString strFileName = searchStr;
CFileFind filefinder;
CString strSearchPath = strSourcePath + "//" + strFileName;
CString filename;
BOOL bfind = filefinder.FindFile(strSearchPath);
CString SourcePath, DisPath;
while (bfind)
{
bfind = filefinder.FindNextFile();
filename = filefinder.GetFileName();
SourcePath = strSourcePath + "//" + filename;
DisPath = strDesPath + "//" + filename;
CopyFile((LPCSTR)SourcePath, (LPCSTR)DisPath, cover);
}
filefinder.Close();
-------------------------------------------------------------------------------------------------------------------------------
━━━━━━━━━━━━━━━━━━━━━━━━
说明:
1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile
2.每个函数都先拷贝了原来的路径,保证了路径是以2个/0/0结尾。(如果不以2个/0/0结尾,往往会出错)
3.对于文件或文件夹都适用
/*
能产生对话框的标志:
FOF_SILENT //progress dialog
FOF_RENAMEONCOLLISION //replace dialog
FOF_NOCONFIRMATION //confirmation dialog
FOF_NOCONFIRMMKDIR //asks for your permission to create a new folder
FOF_NOERRORUI //error message
FOF_ALLOWUNDO //允许放回回收站,一般这个最好做默认
FOF_NOCONFIRMATION //不出现确认对话框(当需要覆盖时)
FOF_SILENT //不显示进度对话框
FOF_NOERRORUI //No user interface will be displayed if an error occurs.
FOF_NOCONFIRMMKDIR //如果目的目录不存在,就默认创建,不需确认
FOF_RENAMEONCOLLISION //如果文件(夹)已存在,自动为其添加序列号修改文件名。此时不会出现确认对话框
FOF_MULTIDESTFILES //把文件夹里的所有内容复制到FileOp.pTo指定的文件夹里,而不是直接复制一个文件夹
FOF_SIMPLEPROGRESS //Displays a progress dialog box but does not show the file names
FOF_CONFIRMMOUSE //Not currently implemented.
FOF_FILESONLY: //执行通配符,只执行文件;
FOF_WANTMAPPINGHANDLE: //要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表
名柄保存在hNameMappings成员中。SHFILEOPSTRUCT结构还包含一个SHNAMEMAPPING结构的数组,此数组
保存由SHELL计算的每个处于操作状态的文件的新旧路径。
说明:
1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile
2.每个函数都先拷贝了原来的路径,保证了路径是以2个/0/0结尾。(如果不以2个/0/0结尾,往往会出错)
3.对于文件或文件夹都适用
*/
/****************************************************************************
复制文件或者文件夹,需要把路径添加2个/0/0
****************************************************************************/
static
bool _CopyFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags=FOF_NOCONFIRMATION)
{
TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= flags;
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_COPY;
return SHFileOperation(&FileOp) == 0;
}
/****************************************************************************
删除文件或者文件夹,需要把路径添加2个/0/0
****************************************************************************/
static
bool _DeleteFile(const TCHAR* _pFrom,WORD flags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION)
{
TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
SHFILEOPSTRUCT FileOp={0};
FileOp.pFrom = pFrom;
FileOp.pTo = NULL; //一定要是NULL
FileOp.fFlags= flags;
FileOp.wFunc = FO_DELETE; //删除操作
return SHFileOperation(&FileOp) == 0;
}
/****************************************************************************
移动文件或者文件夹,需要把路径添加2个/0/0
****************************************************************************/
static
bool _MoveFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags=FOF_NOCONFIRMATION)
{
TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= flags;
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_MOVE;
return SHFileOperation(&FileOp) == 0;
}
/****************************************************************************
重命名文件或者文件夹
可以的话用 rename(buf,TempFilePath) (文件和文件夹都可以) because不需要把路径添加2个/0/0
****************************************************************************/
static
bool _ReNameFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags=FOF_NOCONFIRMATION)
{
TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = flags;
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_RENAME;
return SHFileOperation(&FileOp) == 0;
}
调用示例:
void CDemoDlg::OnButton1()
{
bool rel=_CopyFile(_T("c://t.bmp"),_T("C://pic_1.bmp") );
traceRel(rel,_T("_CopyFile"));
}
void CDemoDlg::OnButton2()
{
bool rel=_CopyFile(_T("c://t.bmp"),_T("C://pic_1.bmp"),FOF_SILENT);
traceRel(rel,_T("_CopyFile"));
}
void CDemoDlg::OnButton3()
{
//复制文件夹并且重命名,需要FOF_MULTIDESTFILES
//当覆盖时如果里面有的文件不会被删除
bool rel=_CopyFile(_T("c://a"),_T("C://d"),FOF_MULTIDESTFILES|FOF_NOCONFIRMATION);
traceRel(rel,_T("_CopyFile"));
}
void CDemoDlg::OnButton4()
{
//复制文件到指定目录下,不需要 FOF_MULTIDESTFILES,pTo目录要有效,否则虽能复制,但结果怪怪的
bool rel=_CopyFile(_T("c://a"),_T("C://d"),FOF_NOCONFIRMATION);
traceRel(rel,_T("_CopyFile"));
}
void CDemoDlg::OnButton5()
{
bool rel=_DeleteFile(_T("C://d"),FOF_ALLOWUNDO|FOF_NOCONFIRMATION/*|FOF_SILENT*/);
traceRel(rel,_T("_DeleteFile"));
}
void CDemoDlg::OnButton6()
{
bool rel=_MoveFile(_T("c://t.bmp"),_T("d://erw.bmp"),FOF_NOCONFIRMATION|FOF_SILENT);
traceRel(rel,_T("_CopyFile"));
}
void CDemoDlg::OnButton7()
{
bool rel=_ReNameFile(_T("c://t.bmp"),_T("c://v.bmp"),FOF_NOCONFIRMATION|FOF_SILENT);
traceRel(rel,_T("_ReNameFile"));
}
void CDemoDlg::OnButton8()
{
bool rel=_ReNameFile(_T("c://a"),_T("c://b"),FOF_NOCONFIRMATION|FOF_SILENT);
traceRel(rel,_T("_ReNameFile"));
}
- vc 文件及文件夹处理
- vc 遍历文件夹,删除文件及文件夹!
- python 处理文件及文件夹
- 【VC++】列举当前及子文件夹文件
- 用VC遍历文件夹中的所有文件及文件夹
- 用VC遍历文件夹中的所有文件及文件夹
- 批量处理 删除过期文件及文件夹
- vc选取及保存文件对话框\浏览文件夹对话框
- vc通过shellexecute打开指定文件夹及文件
- PHP 遍历文件夹及文件类及处理类
- PHP 遍历文件夹及文件类及处理类
- VC 遍历指定文件下的所有文件夹和文件 + 删除指定文件夹及下面所有文件及文件夹
- VC遍历指定文件夹下的所有文件 及如何删除文件夹
- VC++能用的,遍历文件夹及子文件夹文件的代码
- 计算机无法显示隐藏文件及文件夹的处理办法
- 文件以及文件夹处理
- vc++创建文件夹及子文件夹,创建多级文件夹
- 遍历文件及文件夹
- HQL删除语句
- 给自己的目标
- 新的开始
- 忐忑
- bib和reg文件的不同之处
- vc 文件及文件夹处理
- Gentoo Linux内核配置(二)
- c#操作DBF数据库文件
- 小结2010,展望2011
- VC 文件对话框 目录选择
- 嵌入式Linux系统工程师学习大纲
- TFS文件系统策略分析
- 设计模式(一)Singleton,Command
- 设计模式