- 版本
vs2012
- 实例说明
1.使用API函数CreateFile创建一个文件,通过取值CREATE_ALWAYS设置文件存在时将进行覆盖。
2.通过CFlie类创建一个文件,通过CFile的构造函数指定一个文件路径,只要文件不存在就新建一个文件。
界面
- 关键技术
本实例的实现主要使用CreateFile函数和CFile类构造函数
(1)CreateFile函数基本格式如下:
CreateFile(
_In_ LPCSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
CreateFile函数的参数说明
参数 | 说明 |
lpFileName | 文件名 |
dwDesiredAccess | 如果为GENERIC_READ,表示允许对设备进行读访问;如果为GENERIC_WRITE,表示允许对设备进行读写访问(可组合使用);如果为0,表示只允许获取与一个设备有关的信息 |
dwShareMode | 0表示不共享;FILE_SHARE_READ和/或FILE_SHARE_WRITE表示允许对文件进行共享访问 |
lpSecurityAttributes | SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性 |
dwCreationDisposition | 可选值如图所示 |
dwFlagsAndAttributes | 其值如图所示 |
hTemplateFile | 不为0,则指定一个文件句柄。新文件将从这个文件中复制扩展属性 |
参数dwCreationDisposition的取值
取值 | 说明 |
CREATE_NEW | 创建文件,如文件存在则会出错 |
CREATE_ALWAYS | 创建文件,会改写前一个文件 |
OPEN_EXISTING | 文件必须已经存在,由设备提出要求 |
OPEN_ALWAYS | 如文件不存在则创建 |
TRUNCATE_EXISTING | 将现有文件缩短为零长度 |
参数dwFlagsAndAttributes的取值
取值 | 说明 |
FILE_ATTRIBUTE_ARCHIVE | 标记归档属性 |
FILE_ATTRIBUTE_COMPRESSED | 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式 |
FILE_ATTRIBUTE_NORMAL | 默认属性 |
FILE_ATTRIBUTE_HIDDEN | 隐藏文件或者目录 |
FILE_ATTRIBUTE_READONLY | 文件为只读 |
FILE_ATTRIBUTE_SYSTEM | 文件为系统文件 |
FILE_FLAG_WRITE_THROUGH | 操作系统不得推迟对文件的写操作 |
FILE_FLAG_OVERLAPPED | 允许对文件进行重叠操作 |
FILE_FLAG_NO_BUFFERING | 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块 |
FILE_FLAG_RANDOM_ACCESS | 针对随机访问对文件缓冲进行优化 |
FILE_FLAG_SEQUENTIAL_SCAN | 针对连续访问对文件缓冲进行优化 |
FILE_FLAG_DELETE_ON_CLOSE | 关闭上一次打开的句柄后,将文件删除。特别适合临时文件 |
CFlie类构造函数基本格式如下
CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
参数说明:
lpszFileName:文件路径。
nOpenFlags:打开方式。
Microsoft 基础类文件类的基类。https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cfile-class?view=msvc-160
- 设计过程
(1)新建一个基于对话框的应用程序。
(2)向窗体中添加两个按钮控件,执行创建文件的函数。
(3)主要代码如下:
void CDemoDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 //使用CreateFile函数创建 HANDLE fHandle; fHandle = CreateFile("D:\1\1.txt", 0, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL); if (fHandle == INVALID_HANDLE_VALUE) { MessageBox("创建失败"); } }
void CDemoDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 //使用CFile类构造函数创建 CFile file("D:\1\2.txt", CFile::modeCreate); }
创建隐藏文件,dwFlagsAndAttributes参数指定为隐藏属性FILE_ATTRIBUTE_HIDDEN
//使用CreateFile函数创建 HANDLE fHandle; fHandle = CreateFile("D:\1\3.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); if (fHandle == INVALID_HANDLE_VALUE) { MessageBox("创建失败"); }
- 演示
Caesar卢尚宇
2021年1月30日