电脑知识
createfile(createfile2于动态链接库kernel32.dll)
2023-04-12 11:32

Createfile函数是Windows中一个比较重要的应用程序编程接口(API),该函数功能主要提供打开、创建和存取文件等功能。

一、Createfile函数介绍

1. Createfile函数是是一个Windows API,包含在头文件“Windows.h”中,以下是它的声明:

HANDLE CreateFile(

\t LPCTSTR lpFileName,

\t DWORD dwDesiredAccess,

\t DWORD dwShareMode,

\t LPSECURITY_ATTRIBUTES lpSecurityAttributes,

\t DWORD dwCreationDisposition,

\t DWORD dwFlagsAndAttributes,

\t HANDLE hTemplateFile

\t );

2. Createfile函数主要提供以下功能:

(1)打开或创建一个文件:只要给定了文件名,就可以使用Createfile函数打开或创建一个文件。

(2)指定相应控制参数:通过设定合适的参数值,可以控制文件的访问权限,以及是创建新文件还是打开现有文件等。

(3)通过返回的句柄,实现文件访问:Createfile函数成功被调用后,会返回一个句柄(HANDLE),该句柄可以用来控制文件的后续读写操作。

二、Createfile函数参数介绍

1. lpFileName:要打开或创建的文件名,可以是文件的本地路径名,也可以是远程路径名,其中C表示字符串是Unicode类型。

2. dwDesiredAccess:访问文件时使用的访问权限,包括读写权限、只读权限以及共享访问权限等,以及允许重叠访问的权限。

3. dwShareMode:允许他人访问该文件的权限,如允许他人读、写或读写该文件等。

4. lpSecurityAttributes:提供文件系统完全性,定义应用程序调用CreateFile函数打开或创建的文件在其他方面(内存、系统中其他访问者)是如何被保护的,其中有个结构体SECURITY_ATTRIBUTES,可以定义文件安全属性。

5. dwCreationDisposition:控制文件创建和打开行为,也就是指定是新创建文件、打开文件、重写文件等。

6. dwFlagsAndAttributes:指定文件的特性,包括文件的类型和是否被激活等等。

7. hTemplateFile:指定一个文件的句柄,如果Createfile函数正在创建一个文件,那么将从该文件中复制文件属性,可以是一个空句柄,指定为NULL。

三、Createfile函数返回值

当Createfile函数被成功调用时,Createfile函数将返回一个句柄用来表示一个文件,以供后续的访问操作。该句柄用来指向文件的位置,表示该文件已经被打开了。如果呼叫函数失败,将返回一个无效的句柄(INVALID_HANDLE_VALUE),函数失败原因可以使用GetLastError API 函数来得到。

四、示例代码

代码如下:

HANDLE hFile=CreateFile(\"D:\\\\Test\\\\test.txt\",

\tGENERIC_WRITE,

\t0,

\tNULL,

\tOPEN_EXISTING,

\tFILE_ATTRIBUTE_NORMAL,

\tNULL);

if(hFile == INVALID_HANDLE_VALUE)

{

\tprintf(\"CreateFile Error: %d\

\", GetLastError());

\treturn;

}

//关闭文件

CloseHandle(hFile);

本示例中,程序首先尝试使用Createfile函数打开文件 D:\\\\Test\\\\test.txt,如果文件存在,则对其进行读写操作,若不存在,则调用GetLastError API 函数来检查文件打开原因,最后调用CloseHandle函数来关闭文件。

(一)Createfile 函数简介

CreateFile 函数是Windows API 函数,作用是创建或打开一个文件或设备,可以根据文件特定访问模式和打开的文件的属性,指定创建这个文件或设备的方式。该函数通过返回一个句柄来引用该文件或者设备,以便让应用程序读写文件。它是API 中最强大的函数,具有诸多实用功能。

(二)Createfile 函数原型

CreateFile函数的原型为:

BOOL CreateFile(

LPCSTR lpFileName, // 文件名

DWORD dwDesiredAccess, // 访问模式

DWORD dwShareMode, // 共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性

DWORD dwCreationDistribution, // 如何创建

DWORD dwFlagsAndAttributes, // 文件属性

HANDLE hTemplateFile // 模板文件句柄

);

(三)CreateFile 函数的参数

1. lpFileName:指向文件名的指针,必须以路径限定文件名。注意:对于打开一个文件、管道、驱动程序等等,此参数可以使用以NULL结尾的字符串。

2. dwDesiredAccess:访问权限,决定可以怎样使用打开的文件,如读、写、追加、这个参数由以下的权限信息组成:

GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | GENERIC_ALL

3. dwShareMode:共享模式,决定改句柄在对其他句柄下改变文件时,有何种行为,该参数由以下常数组成:

FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE

4. lpSecurityAttributes:指向SECURITY_ATTRIBUTES 结构体的指针,可以为NULL,如果不为NULL值,这个参数表示文件主要时让他具有安全性。

5. dwCreationDistribution:即CreateDistribution,它根据文件是否已经存在来确定所采取的操作。

CREATE_NEW | CREATE_ALWAYS | OPEN_EXISTING | OPEN_ALWAYS | TRUNCATE_EXISTING

6. dwFlagsAndAttributes:指定文件的属性,如是否是只读等等,必须和文件的访问模式相吻合,若打开文件是要读和写,那么此属性也必须是允许读写,该参数有以下常数:

FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_ENCRYPTED|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL

|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY

7. hTemplateFile:指向文件模板的句柄,此参数表示当新建文件时,当调用CreateFile时,定义文件的新建属性。

(四)Createfile 函数的返回值

CreateFile函数的返回值是一个句柄,该句柄可用于之后的ReadFile、WriteFile函数等操作.若返回为INVALID_HANDLE_VALUE,则表示函数失败。

(五)Createfile 函数使用实例

例如下面程序,是根据返回值来判断文件是否存在,如果文件存在,则返回true,否则返回false:

HANDLE hFile;

hFile = CreateFile(\"d:\\\\test.txt\",

\t\t\t\t\tGENERIC_READ,

\t\t\t\t\t0,

\t\t\t\t\tNULL,

\t\t\t\t\tOPEN_EXISTING,

\t\t\t\t\tFILE_ATTRIBUTE_NORMAL,

\t\t\t\t\tNULL);

if (hfile == INVALID_HANDLE_VALUE)

{

\treturn false;

}

else

{

\tCloseHandle(hfile);

\treturn true;

}

在上面的例子中,CreateFile函数第一个参数指定了文件路径,第三个参数指定了文件的共享模式,第四个参数指定文件的安全属性,第五个参数指定如何创建文件,第六个参数指定了文件的属性,第七个参数指定了文件的模板文件句柄。

发表评论
0评