• 汇编语言CreateFile函数:创建新文件或者打开已有文件

    函数 CreateFile 可以创建一个新文件或者打开一个已有文件。如果调用成功,函数返回打开文件的句柄;否则,返回特殊常数 INVALID_HANDLE_VALUEO 原型如下:

    CreateFile PROTO,                                ;创建新文件
        lpFilename:PTR BYTE,                       ;文件名指针
        dwDesiredAccess:DWORD,              ;访问模式
        dwShareMode:DWORD,                  ;共享模式
        lpSecurityAttributes:DWORD,          ;安全属性指针
        dwCreationDisposition:DWORD,     ;文件创建选项
        dwFlagsAndAttributes:DWORD,      ;文件属性
        hTemplateFile:DWORD                    ;文件模板句柄

    下表对参数进行了说明。如果函数调用失败则返回值为零。

    参数  说明
    lpFileName 指向一个空字节结束字符串,该串为部分或全部合格的文件名(drive:\path\filename)
    dwDesiredAccess 指定文件访问方式(读或写)
    dwShareMode 控制多个程序对打开文件的访问能力
    lpSecurityAttributes 指向安全结构,该结构控制安全权限
    dwCreationDisposition 指定文件存在或不存在时的操作
    dwFlagsAndAttributes 包含位标志指定文件属性,如存档、加密、隐藏、普通、系统和临时
    hTemplateFile 包含一个可选的文件模板句柄,该文件为已创建的文件提供文件属性和扩展属性;如果不使用该参数,就将其设置为 0

    dwDesiredAccess

    参数 dwDesiredAccess 允许指定对文件进行读访问、写访问、读/写访问,或者设备查询访问。可以从下表列出的值中选择,也可以从表中未列出的更多特定标志值选择。

    含义
    0 为对象指定设备查询访问。应用程序可以查询设备属性而无需访问设备,也可以检查文件是否存在
    GENERIC_READ 为对象指定读访问。可以从文件中读取数据,文件指针可以移动。与 GENERIC_WRITE 一起使用为读/写访问
    GENERIC_WRITE 对对象指定写访问。可以向文件中写入数据,文件指针可以移动。与 GENERIC_READ 一起使用为读/写访问

    dwCreationDisposition

    参数 dwCreationDisposition 指定当文件存在或不存在时应采取怎样的操作。可从下表中选择一个值。

    含义
    CREATE_NEW 创建一个新文件。要求将参数 dwDesiredAccess 设置为 GENERIC_WRITE。如果文件已经存在,则函数调用失败
    CREATE_ALWAYS  创建一个新文件。如果文件已存在,则函数会覆盖原文件,清除现有属性,并合并文件 属性与预定义的常数 FILE_ATTRIBUTES_ARCHIVE 中属性参数指定的标志。要求将参数 dwDesiredAccess 设置为 GENERIC WRITE
    OPEN_EXISTING 打开文件。如果文件不存在,则函数调用失败。可用于读取和/或写入文件
    OPEN_ALWAYS 如果文件存在,则打开文件。如果不存在,则函数创建文件,就好像CreateDisposition 的值为 CREATE NEW
    TRUNCATE_EXISTING 打开文件。一旦打开,文件将被截断,使其大小为零。要求将参数 dwDesiredAccess 设置为 GENERIC_WRITE。如果文件不存在,则函数调用失败

    下表列出了参数 dwFlagsAndAttributes 比较常用的值。(完整列表请在 Microsoft 在线文档中搜索CreateFiko)允许任意属性组合,除了 FILE_ATTRIBUTE_NORMAL 会被其他 所有属性覆盖。这些值能映射为 2 的幂,因此可以用汇编时 OR 运算符或 + 运算符将它们组 合为一个参数:

    FILE_ATTRIBUTE_HIDDEN OR FILE_ATTRIBUTE_READONLY
    FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_READONLY

    属性 含义
    FILE_ATTRIBUTE_ARCHIVE 文件存档。应用程序使用这个属性标记文件以便备份或移动
    FILE_ATTRIBUTE_HIDDEN 文件隐藏。不包含在普通目录列表中
    FILE_ATTRIBUTE_NORMAL 文件没有其他属性设置。该属性只在单独使用时有效
    FILE_ATTRIBUTE_READONLY 文件只读。应用程序可以读文件但不能写或删除文件
    FILE_ATTRIBUTE_TEMPORARY 文件被用于临时存储

    【示例】下面的例子仅具说明性,展示了如何创建和打开文件。请参阅在线从 Microsoft文 档,了解 CreateFile 更多可用选项:

    打开并读取(输入)已存在文件:

    INVOKE CreateFile,
        ADDR filename,            ;文件名指针
        GENERIC_READ,             ;读文件
        DO_NOT_SHARE,             ;共享模式
        NULL,                     ;安全属性指针
        OPEN_EXISTING,            ;打开已存在文件
        FILE_ATTRIBUTE_NORMALA    ;普通文件属性
        0                         ;未使用

    打开并写入(输出)已存在文件。文件打开后,可以通过写入覆盖当前数据,或者将文件指针移到末尾,向文件添加新数据(参见11.1.6节的SetFilePointer):

    INVOKE CreateFile,
        ADDR filename,
        GENERIC_WRITEZ,      ;写文件
        DO_NOT_SHARE,
        NULL,
        OPEN_EXISTIN,       ;文件必须存在
        FILE_ATTRIBUTE_NORMAL,
        0

    创建有普通属性的新文件,并删除所有已存在的同名文件:

    INVOKE CreateFile,
        ADDR filename,
        GENERIC_WRITE,       ;写文件
        DO _NOT_SHARE,
        NULL,
        CREATE_ALWAYS,       ;覆盖已存在的文件
        FILE_ATTRIBUTE_NORMAL,
        0

    若文件不存在,则创建文件;否则打开并输出现有文件:

    INVOKE CreateFile,
        ADDR filename,
        GENERIC_WRITE,         ;写文件
        DO_NOT_SHARE,
        NULL,
        CREATE_NEW,            ;不删除已存在文件
        FILE_ATTRIBUTE_NORMAL,
        0

更多...

加载中...