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函数第一个参数指定了文件路径,第三个参数指定了文件的共享模式,第四个参数指定文件的安全属性,第五个参数指定如何创建文件,第六个参数指定了文件的属性,第七个参数指定了文件的模板文件句柄。