• Win32 API文件读写操作


    1、文件的创建和打开

      HANDLE CreateFile(

        LPCTSTR lpFileName, 

        DWORD dwDesiredAccess, 

        DWORD dwShareMode,         

        LPSECURITY_ATTRIBUTES lpSecurityAttributes,

        DWORD dwCreationDisposition, 

        DWORD dwFlagsAndAttributes, 

        HANDLE hTemplateFile        

      );

        lpFileName:指定用于创建或打开的对象的名称;

        dwDesiredAccess:指定对象的访问方式,包括:

          0  --指定对象可设备查询访问;

          GENERIC_READ  --指定对象可读访问,可从文件中读取数据,并可移动文件中的指针;

          GENERIC_WRITE  --指定对象可写访问,可向文件中写入数据,并可移动文件中的指针;

        dwShareMode:指定共享方式,包括:

          FILE_SHARE_DELETE

          FILE_SHARE_READ

          FILE_SHARE_WRITE

        lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针,用来确定返回的句柄是否能够被子进程所继承;

        dwCreationDisposition:指定如何创建文件,包括:

          CREATE_NEW  --创建一个新文件,如果文件已存在,则函数调用失败;

          CREATE_ALWAYS  --创建一个新文件,如果文件已存在,清空该文件现有属性

          OPEN_EXISTING  --打开文件,如果文件不存在,则函数调用失败

          OPEN_ALWAYS  --如果文件存在,则打开文件;如果文件不存在,则创建一个新文件;

          TRUNCATE_EXISTING  --打开文件,文件打开时被截取使得其大小为0字节,调用该函数必须用GENERIC_WRITE的访问方式来打开文件;如果文件不存在,则函数调用失败;

        dwFlagsAndAttributes:设置文件属性和标志,包括:

          FILE_ATTRIBUTE_ARCHIVE  --该文件是存档文件

          FILE_ATTRIBUTE_HIDDEN  --该文件是隐藏文件

          FILE_ATTRIBUTE_NORMAL  --该文件没有其他属性设置

          FILE_ATTRIBUTE_OFFLINE  --文件的数据已在物理上移动到离线存储设备中,不能立即使用

          FILE_ATTRIBUTE_READONLY  --该文件为只读文件

          FILE_ATTRIBUTE_SYSTEM  --该文件是操作系统文件

          FILE_ATTRIBUTE_TEMPORARY  --该文件做暂时存储使用

          FILE_FLAG_WRITE_THROUGH  --指示系统不经过缓存而直接将数据写入磁盘

          FILE_FLAG_OVERLAPPED  --指示系统初始化该文件对象,以便那些需要较长时间才能完成的操作返回ERROR_IO_PENDING标志

          FILE_FLAG_NO_BUFFERING  --指示系统以不带系统缓冲的方式打开该文件

          FILE_FLAG_RANDOM_ACCESS  --指示该文件是随机访问方式

          FILE_FLAG_SEQUENTIAL_SCAN  --指示该文件是顺序访问方式

          FILE_FLAG_DELETE_ON_CLOSE  --指示当该文件的所有句柄都被关闭后,操作系统将立即删除该文件

          FILE_FLAG_BACKUP_SEMANTICS  --表明是为备份或存储操作而打开或创建该文件的

          FILE_FLAG_POSIX_SEMANTICS  --表明将根据POSIX规则访问该文件

          FILE_FLAG_OPEN_REPARSE_POINT  --指定此标志禁止NTFS再分析点的再分析行为

          FILE_FLAG_OPEN_NO_RECALL  --表明虽然请求了该文件的数据,但该数据仍继续保存在远程存储器中而不应被传回本地存储器

        hTemplateFile:如果打开一个已有文件,则这个参数将被忽略;要使这个参数有效必须满足:为创建新文件,给该参数传递的文件句柄必须是使用GENERIC_READ方式打开的;

    2、文件的写入

      BOOL WriteFile(

        HANDLE hFile,                   

        LPCVOID lpBuffer,               

        DWORD nNumberOfBytesToWrite,    

        LPDWORD lpNumberOfBytesWritten,

        LPOVERLAPPED lpOverlapped       

      );

        hFile:指定要写入数据的文件的句柄

        lpBuffer:指向包含将要写入文件的数据的缓冲区的指针

        nNumberOfBytesToWrite:指明要向文件中写入的字节数

        lpNumberOfBytesWritten:用来接收实际写入到文件中的字节数

        lpOverlapped:指向OVERLAPPED结构体的指针,这个参数若要起作用,须在CreateFile打开文件设置文件属性时添加FILE_FLAG_OVERLAPPED标记,告诉系统需要异步地访问这个文件,默认情况下是以同步IO的方式访问的

    3、文件的读取

      BOOL ReadFile(

        HANDLE hFile,               

        LPVOID lpBuffer,            

        DWORD nNumberOfBytesToRead, 

        LPDWORD lpNumberOfBytesRead,

        LPOVERLAPPED lpOverlapped   

      );

        hFile:指定要读取其数据的文件的句柄

        lpBuffer:指向一个缓冲区的指针,该缓冲区将接收从文件中读取的数据

        nNumberOfBytesToRead:指定从文件读取的字节数

        lpNumberOfBytesRead:用来接收实际读到的字节数

        lpOverlapped:指向OVERLAPPED结构体的指针,这个参数若要起作用,须在CreateFile打开文件设置文件属性时添加FILE_FLAG_OVERLAPPED标记,告诉系统需要异步地访问这个文件,默认情况下是以同步IO的方式访问的

    例:

    //定义一个句柄变量
    HANDLE hFile;
    //创建文件
    hFile = CreateFile("1.txt", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
    //接收实际写入的字节数
    DWORD dwWrites;
    //写入数据
    WriteFile(hFile, "hello world!", strlen("hello world!"), &dwWrites, NULL);
    //关闭文件句柄
    CloseHandle(hFile);
    
    HANDLE hFile;
    //打开文件
    hFile = CreateFile("1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    //接收实际读取到的数据
    char ch[100];
    //接收实际读取到的字节数
    DWORD dwReads;
    //读取数据
    ReadFile(hFile, ch, 100, &dwReads, NULL);
    //设置字符串结束字符
    ch[dwReads] = 0;
    //关闭打开的文件对象的句柄
    CloseHandle(hFile);
    //显示读取到的数据
    MessageBox(ch);
    
  • 相关阅读:
    cocos2d-x之物理引擎初试
    cocos2d-x之猜数字游戏
    cocos2d-x之加法计算器
    cocos2d-x之悦动的小球
    cocos2d-x之多个移动的小球
    cocos2d-x之json文件读取初试
    cocos2d-x之xml文件读取初试
    cocos2d-x之使用plist文件初试
    cocos2d-x之文件读写
    cocos2d-x之首选项数据初试
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918730.html
Copyright © 2020-2023  润新知