65.9K
CodeProject 正在变化。 阅读更多。
Home

CFileManip:“类DOS命令”文件/目录操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (11投票s)

2002 年 7 月 29 日

3分钟阅读

viewsIcon

179725

downloadIcon

3255

一个允许快速简便进行文件/目录操作的类

Sample Image - CFileManip_demo.gif

引言

和许多人一样,我在DOS 6.x是主流操作系统的时候开始使用计算机,我已经非常习惯它了,以至于现在将近十年过去了,我仍然清晰地记得那些DOS命令,仿佛昨天还在输入它们。

我在我的程序中大量进行文件/目录操作,每次我想将一个目录(包括所有文件和嵌套的子目录)复制或删除到/从客户的磁盘时,我就会想起那些DOS命令,比如“xcopy”、“deltree”。当然,这些都可以通过API调用来实现,但如果有一个类能用一行代码就完成这些事情,难道不更方便吗?如果这个类的成员函数看起来像DOS命令,那岂不是更酷?

CFileManip是一个API封装类,旨在使文件操作更简单、更容易。该类本身主要提供了“类DOS命令”的方法,这些方法在名称和功能上都与相关的DOS命令非常相似,我希望它们能带你回到DOS时代的黄金时光。:-)能够在我的C++代码中使用“xcopy”和“deltree”这样的函数是我一直想要的。

在漫长的任务过程中会自动提供进度窗口。该类不需要MFC,因此可以在任何Win32应用程序中使用。

类成员方法

// File-only operations
static BOOL Copy(LPCTSTR lpSource, LPCTSTR lpDestination, BOOL bHidePrompt = TRUE);
static BOOL Del(LPCTSTR lpSource, BOOL bHidePrompt = TRUE);
static BOOL Ren(LPCTSTR lpSource, LPCTSTR lpDestination, BOOL bHidePrompt = TRUE);
参数
lpSource:指定源目标的以null结尾的字符串。允许使用通配符。
lpDestination:指定目标路径的以null结尾的字符串。
bHidePrompt:如果设置为TRUE,则不会显示任何提示或确认消息窗口,否则在各种情况下可能会出现这些消息窗口。

返回值
如果操作成功,则返回TRUE,否则返回FALSE。

备注
顾名思义,它们执行DOS命令“copy”(复制文件)、“del”(删除文件)和“ren”(重命名文件)所做的事情。这些是仅限文件的操作,不允许任何方法修改目录。

// File/directory operations
static BOOL XCopy(LPCTSTR lpSource, LPCTSTR lpDestination, BOOL bHidePrompt = TRUE);
static BOOL DelTree(LPCTSTR lpSource, BOOL bHidePrompt = TRUE);
static BOOL Move(LPCTSTR lpSource, LPCTSTR lpDestination, BOOL bHidePrompt = TRUE);

参数
lpSource:指定源目标的以null结尾的字符串。允许使用通配符。
lpDestination:指定目标路径的以null结尾的字符串。
bHidePrompt:如果设置为TRUE,则不会显示任何提示或确认消息窗口,否则在各种情况下可能会出现这些消息窗口。

返回值
如果操作成功,则返回TRUE,否则返回FALSE。

备注
顾名思义,它们执行DOS命令“xcopy”(将文件或目录(包括子目录)复制到目标路径,并继承所有属性和子目录结构)、“deltree”(删除文件或目录(包括子目录))和“move”(将文件或目录移动到目标路径)所做的事情。这些方法可以修改文件和目录。

// Directory-only operations
static BOOL MkDir(LPCTSTR lpDirectory);
static BOOL RmDir(LPCTSTR lpDirectory);

参数
lpDirectory:指定目录名称的以null结尾的字符串。

返回值
如果操作成功,则返回TRUE,否则返回FALSE。

备注
简单的API调用。顾名思义,它们执行DOS命令“mkdir”(创建空目录)、“rmdir”(删除空目录)。这些操作不能修改文件。

// File/directory attributes access
static BOOL SetAttribute(LPCTSTR lpSource, DWORD dwNewAttr);
static DWORD GetAttribute(LPCTSTR lpSource);

参数
lpSource:指定源目标的以null结尾的字符串。
dwNewAttr:一个DWORD值,表示要分配给源目标的新属性。有关属性值的完整列表,请参阅MSDN“Platform SDK: Files and I/O: SetFileAttributes”。

返回值
SetAttribute如果操作成功,则返回TRUE,否则返回FALSE。
GetAttribute返回一个DWORD值,表示源目标的属性。有关属性值的完整列表,请参阅MSDN“Platform SDK: Files and I/O: GetFileAttributes”。

备注
设置和获取文件或目录的属性。

// File/directory existence check
enum { FM_NOTEXIST = 0, FM_DIRECTORY, FM_FILE};
static int Existence(LPCTSTR lpSource);

参数
lpSource:指定源目标的以null结尾的字符串。

返回值
返回值可以是以下之一:
FM_NOTEXIST:目标不存在。
FM_DIRECTORY:目标是一个现有目录。
FM_FILE:目标是一个现有文件。

备注
检查给定目标的有效性。

// Directory travelling
static BOOL CdDotDot(LPTSTR lpCurDirectory = NULL);

参数
lpCurDirectory:在本次操作后将接收当前目录完整路径的以null结尾的字符串。

返回值
如果当前目录是驱动器的根目录,则返回FALSE,否则返回TRUE。

备注
此函数的作用与DOS命令“cd..”完全相同,即在目录树结构中将当前目录向上(朝向根目录)移动一个级别。在调用CdDotDot之前和之后调用::GetCurrentDirectory将显示差异。

历史

2002年8月3日 - 更新了下载。

2003年2月12日 - 该类已符合UNICODE标准。

2003年2月23日 - 从源代码中删除了某些不必要的代码。

© . All rights reserved.