CreateFile()函数能够用来创建新的文件或打开现有的文件。你必须指定文件名、创建指令、和其它一些属性。当应用程序创建新文件时,操作系统会将它添加到指定的目录里。
当应用程序使用CreateFile()函数时,必须使用dwDesiredAccess参数来指定何种文件操作:读文件、写文件或者是读写文件。这就是所谓的访问模式(access mode)。同时,当所要创建的文件已经存在时,应用程序必须指定将要采取的相应操作。
应用程序也能使用CreateFile()函数来指定所创建的文件是否允许读共享、写共享、读写共享或是不可共享。这就是所谓的共享模式。如果一个打开的文件不允许共享就不能第二次打开了,直到相应的文件句柄被关闭。
当一个进程试图通过共享方式打开一个已经被打开的文件时,系统会将所请求的访问和共享模式同文件打开时所指定的访问和共享模式进行比较。如果在先前的打开操作中你指定了和共享模式冲突的访问模式,CreateFile()会产生共享错误(错误代码为ERROR_SHARING_VIOLATION)。如果在先前的打开操作中你指定了和访问模式冲突的共享模式,CreateFile()会产生共享错误。
除了标准文件属性,你也能通过CreateFile()调用的第四个参数SECURITY_ATTRIBUTES 来指定安全属性。然而,你的操作系统必须支持这点。
一个创建新文件的应用程序能够提供一个临时文件。从这个临时文件中CreateFile()可以获取新文件的属性和扩展属性。
当创建新文件时,CreateFile()函数将会实现如下操作:
1、清楚现存的文件属性
2、将dwFlagsAndAttributes所指定的文件属性和标志同FILE_ATTRIBUTE_ARCHIVE组合
3、将文件长度设为零
4、如果指定了hTemplateFile 参数,就要将由临时文件指定的扩展属性复制到新文件中
5、设置由SECURITY_ATTRIBUTES 结构的lpSecurityDescriptor成员所指定的SD
当打开一个现存的文件,CreateFile()函数将会实现如下操作:
1、将由dwFlagsAndAttributes所指定的文件标志同现有的文件属性组合。CreateFile()将忽略由dwFlagsAndAttributes所指定的文件属性
2、将文件长度设置为dwCreationDisposition所指定的值
3、忽略hTemplateFile参数
4、忽略由SECURITY_ATTRIBUTES 结构的lpSecurityDescriptor成员;会用到其它结构成员
操作系统会给每个打开或创建的文件分配一个所谓文件句柄的唯一标识符。应用程序可以使用文件句柄来调用那些操作文件的函数。文件句柄在被关闭前始终有效。当一个应用程序启动时,如果启动该应用程序的进程所包含的已打开文件句柄可继承的话,该应用程序将继承这些句柄。
在使用文件句柄访问文件之前,应用程序必须检查CreateFile()函数的返回值。如果有错误发生,应用程序可以使用GetLastError()来获取进一步的错误信息。
本文地址:http://com.8s8s.com/it/it23751.htm