函数参考


_WinAPI_CreateFile

为其它设备创建或者打开一个文件.

#Include <WinAPI.au3>
_WinAPI_CreateFile($sFileName, $iCreation [, $iAccess = 4 [, $iShare = 0 [, $iAttributes = 0 [, $pSecurity = 0]]]])

参数

$sFileName 要创建或者打开的对象的名称
$iCreation 当文件存在或者不存在时的操作:
0 - 创建一个新文件. 如果文件存在,函数失败.
1 - 创建一个新文件. 如果文件存在,覆盖写入.
2 - 打开一个文件. 如果文件不存在,函数失败.
3 - 打开一个文件. 如果文件不存在, 函数将创建一个新文件.
4 - 打开一个文件并将文件清空(大小为0字节).如果文件不存在,函数失败.
$iAccess [可选参数] 访问对象权限:
1 - 执行
2 - 读取
4 - 写入
$iShare [可选参数] 对象共享模式:
1 - 删除
2 - 读取
4 - 写入
$iAttributes [可选参数] 文件属性:
1 - 文件将要存档
2 - 文件为隐藏
4 - 文件为只读
8 - 文件是操作系统专有,或者是操作系统的一部分.(系统属性)
$pSecurity [可选参数] 一个指向 $tagSECURITY_ATTRIBUTES 的数据结构指针.用于确定返回的句柄是否可被
自己的子进程继承. 如果 pSecurity 为 0, 句柄将不能被继承.

返回值

成功: 指定文件的打开句柄
失败: 返回 0

注意/说明

thesnow注:CreateFile不仅仅是用来操作文件的.只要有权限,驱动器,硬件同样可以操作.

相关

$tagSECURITY_ATTRIBUTES, _WinAPI_CloseHandle, _WinAPI_FlushFileBuffers, _WinAPI_GetFileSizeEx, _WinAPI_ReadFile, _WinAPI_SetEndOfFile, _WinAPI_SetFilePointer, _WinAPI_WriteFile

详情参考

在MSDN中搜索


示例/演示


#include <WinAPI.au3>

Global $sFile, $hFile, $sText, $nBytes, $tBuffer

; 1) create file and write data to it
$sFile = @ScriptDir & '\test.txt'
$sText = 'abcdefghijklmnopqrstuvwxyz'
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sText), $nBytes)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('1) ' & FileRead($sFile) & @CRLF)

; 2) read 6 bytes from position 3
$tBuffer = DllStructCreate("byte[6]")
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = BinaryToString(DllStructGetData($tBuffer, 1))
ConsoleWrite('2) ' & $sText & @CRLF)

; 3) write previously read 6 bytes from position 3 to the same position but in UpperCase
DllStructSetData($tBuffer, 1, StringUpper($sText))
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
ConsoleWrite('3) ' & FileRead($sFile) & @CRLF)

; 4) truncate file size to 12 bytes
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 12)
_WinAPI_SetEndOfFile($hFile)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('4) ' & FileRead($sFile) & @CRLF)

FileDelete($sFile)