如何使用CreateFile函数创建新的文件?

作者:太原麻将开发公司 阅读:39 次 发布时间:2025-06-01 21:24:13

摘要:CreateFile函数是Windows API中最常用的一个函数,其使用广泛,可以用于创建、打开、删除、修改文件及管道、串口、打印机等对象。在Windows操作系统下,CreateFile函数非常十分重要,没有它,我们很难进行文件操作。本文将介绍如何使用CreateFile函数创建新的文件。1. 函数说...

CreateFile函数是Windows API中最常用的一个函数,其使用广泛,可以用于创建、打开、删除、修改文件及管道、串口、打印机等对象。在Windows操作系统下,CreateFile函数非常十分重要,没有它,我们很难进行文件操作。本文将介绍如何使用CreateFile函数创建新的文件。

如何使用CreateFile函数创建新的文件?

1. 函数说明

CreateFile函数是Windows操作系统中最重要的一个函数之一,它可以用于创建或打开文件,也可以用来打开设备和管道,其定义如下:

```

HANDLE CreateFile(

LPCTSTR lpFileName, // 文件名

DWORD dwDesiredAccess, // 访问模式

DWORD dwShareMode, // 共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全描述

DWORD dwCreationDisposition, // 创建模式

DWORD dwFlagsAndAttributes, // 文件属性

HANDLE hTemplateFile // 模板句柄

);

```

2. 参数详解

2.1 lpFileName

该参数是一个字符串指针,指向文件名或为文件路径(包含文件名)的指针。可以使用绝对或相对路径名。如果指定的文件名或路径名不带有反斜杠,则系统从当前目录下查找。

2.2 dwDesiredAccess

该参数指定文件的访问权限,可以是下面几种类型:

- FILE_READ_DATA:表示申请文件读取权限。

- FILE_WRITE_DATA:表示申请文件写入权限。

- FILE_APPEND_DATA:表示申请在文件末尾添加数据的权限。

- FILE_EXECUTE:表示申请执行访问权限。

- FILE_DELETE_CHILD:表示申请删除子目录和文件的权限。

- FILE_READ_ATTRIBUTES:表示申请读取文件属性的权限。

- FILE_WRITE_ATTRIBUTES:表示申请修改文件属性的权限。

参数也可以使用以下几种组合:

- GENERIC_READ:表示读取文件的权限,相当于 FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_EXECUTE。

- GENERIC_WRITE:表示写入文件的权限,相当于FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_APPEND_DATA。

- GENERIC_EXECUTE:表示执行的权限,相当于FILE_EXECUTE | FILE_READ_ATTRIBUTES。

- GENERIC_ALL:表示所有的权限,相当于GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | FILE_DELETE_CHILD。

在使用时,只需要传入所需要的权限即可。

2.3 dwShareMode

该参数指定了打开文件的共享模式,可以是下面几种类型:

- FILE_SHARE_WRITE:表示打开文件时不会允许写操作,但是允许共享其他的读取操作。

- FILE_SHARE_READ:表示打开文件时不会允许读取操作,但是允许共享其他的写入操作。

- FILE_SHARE_DELETE:表示打开文件时不会允许删除操作,但是允许共享其他的读取或写入操作。

- 0或FALSE:表示不允许其他进程也打开此文件。

当多个进程访问同一个文件时,可以使用此参数避免文件冲突。

2.4 lpSecurityAttributes

该参数是一个指向SECURITY_ATTRIBUTES结构体的指针,其目的是设置文件的安全描述符。如果传递NULL,则文件不具有安全描述符,并且不能与其他文件共享。

2.5 dwCreationDisposition

该参数指定如何创建或打开文件,可以是下面几种类型:

- CREATE_NEW:表示创建一个新的文件,如果文件已经存在,则函数将返回失败。

- CREATE_ALWAYS:表示如果文件存在,函数会先将其截断为零长度,然后重新打开此文件并写入数据。

- OPEN_EXISTING:表示打开一个已经存在的文件,如果文件不存在,则函数将返回失败。

- OPEN_ALWAYS:表示打开一个已经存在的文件,如果文件不存在,则新建一个文件。

- TRUNCATE_EXISTING:表示打开一个已经存在的文件,但是在打开文件时将文件的长度截成为零。

参数中CREATE_NEW、OPEN_EXISTING 和 TRUNCATE_EXISTING三种模式只能选择其中一种。

2.6 dwFlagsAndAttributes

该参数用于设置文件的属性,可以是下面几种类型:

- FILE_ATTRIBUTE_ARCHIVE:表示文件的档案属性,如果传递0,则默认为此属性。

- FILE_ATTRIBUTE_HIDDEN:表示文件的隐藏属性。

- FILE_ATTRIBUTE_NORMAL:表示文件的一般属性。

- FILE_ATTRIBUTE_READONLY:表示文件的只读属性。

- FILE_ATTRIBUTE_TEMPORARY:表示文件的临时属性。

在多数场景中,只需要传进去FILE_ATTRIBUTE_NORMAL即可。

2.7 hTemplateFile

该参数一般设置成NULL,此参数用于指定一个文件句柄,在打开时,是按照该文件的属性打开的。

3. 创建新文件

3.1 创建一个新文件

在创建新文件时,需要先确定好要创建的文件名和文件路径,如果文件路径不存在,则需要先创建文件夹。然后使用CreateFile函数来创建新文件。

示例代码:

```

#include

int main() {

HANDLE hFile = CreateFile(

TEXT("C:\\test.txt"), // 指定要创建的文件名

GENERIC_READ | GENERIC_WRITE, // 指定操作权限

0, // 共享模式

NULL, // 安全描述符

CREATE_NEW, // 创建新文件

FILE_ATTRIBUTE_NORMAL, // 文件属性

NULL); // 模板文件句柄

if (hFile == INVALID_HANDLE_VALUE) {

printf("创建文件失败!错误码:%d \n", GetLastError());

return 1;

}

printf("创建文件成功!\n");

CloseHandle(hFile);

return 0;

}

```

上面的代码创建了一个名为test.txt的文件,使用了GENERIC_READ | GENERIC_WRITE的访问权限和CREATE_NEW的创建模式。如果文件已经存在则会创建失败,如果创建成功则输出"创建文件成功!"。

3.2 打开一个已经存在的文件

在打开一个已经存在的文件时,同样需要确定好文件名和路径,这里的路径可以是绝对路径或相对路径,然后使用CreateFile函数来打开已经存在的文件。

示例代码:

```

#include

int main() {

HANDLE hFile = CreateFile(

TEXT("test.txt"), // 指定要打开的文件名

GENERIC_READ | GENERIC_WRITE, // 指定操作权限

0, // 共享模式

NULL, // 安全描述符

OPEN_EXISTING, // 打开一个已经存在的文件

FILE_ATTRIBUTE_NORMAL, // 文件属性

NULL); // 模板文件句柄

if (hFile == INVALID_HANDLE_VALUE) {

printf("打开文件失败!错误码:%d \n", GetLastError());

return 1;

}

printf("打开文件成功!\n");

CloseHandle(hFile);

return 0;

}

```

上面的代码打开了一个名为test.txt的文件,使用了GENERIC_READ | GENERIC_WRITE的访问权限和OPEN_EXISTING的打开模式。如果文件不存在则打开失败,如果打开成功则输出"打开文件成功!"。

4. 总结

CreateFile函数在Windows操作系统下非常重要,可以用于创建新文件,打开已经存在的文件,也能用于打开设备和管道。在使用CreateFile函数时,需要正确传递参数,指定好访问权限、共享模式、打开模式、文件路径以及属性等。这样才能保证CreateFile函数的正确使用。

到此,关于如何使用CreateFile函数创建新的文件,介绍完毕。希望本文能够对您有所帮助。

  • 原标题:如何使用CreateFile函数创建新的文件?

  • 本文链接:https://qipaikaifa.cn/qpzx/4040.html

  • 本文由太原麻将开发公司中天华智网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与中天华智网联系删除。
  • 微信二维码

    ZTHZ2028

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:157-1842-0347


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部