zoukankan      html  css  js  c++  java
  • CreateFile使用方法和样例

     

    函数原型: 

            HANDLE CreateFile(

      LPCTSTR lpFileName, //指向文件名称的指针
      DWORD dwDesiredAccess, //訪问模式(写/读)
      DWORD dwShareMode, //共享模式
      LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
      DWORD dwCreationDisposition, //怎样创建
      DWORD dwFlagsAndAttributes, //文件属性
      HANDLE hTemplateFile //用于拷贝文件句柄
      );
      參数列表
      lpFileName String 要打开的文件的名字
      dwDesiredAccess Long 假设为 GENERIC_READ 表示同意对设备进行读訪问;假设为 GENERIC_WRITE 表示同意对设备进行写訪问(可组合使用);假设为零,表示仅仅同意获取与一个设备有关的信息
      dwShareMode Long, 零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示同意对文件进行共享訪问
      lpSecurityAttributes SECURITY_ATTRIBUTES, 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(假设操作系统支持的话)
      dwCreationDisposition Long,下述常数之中的一个:
      CREATE_NEW 创建文件;如文件存在则会出错
      CREATE_ALWAYS 创建文件,会改写前一个文件
      OPEN_EXISTING 文件必须已经存在。由设备提出要求
      OPEN_ALWAYS 如文件不存在则创建它
      TRUNCATE_EXISTING 讲现有文件缩短为零长度
      dwFlagsAndAttributes Long, 一个或多个下述常数
      FILE_ATTRIBUTE_ARCHIVE 标记归档属性
      FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在文件夹中的默认压缩方式
      FILE_ATTRIBUTE_NORMAL 默认属性
      FILE_ATTRIBUTE_HIDDEN 隐藏文件或文件夹
      FILE_ATTRIBUTE_READONLY 文件为仅仅读
      FILE_ATTRIBUTE_SYSTEM 文件为系统文件
      FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
      FILE_FLAG_OVERLAPPED 同意对文件进行重叠操作
      FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件仅仅能写入磁盘卷的扇区块
      FILE_FLAG_RANDOM_ACCESS 针对随机訪问对文件缓冲进行优化
      FILE_FLAG_SEQUENTIAL_SCAN 针对连续訪问对文件缓冲进行优化
      FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合暂时文件
      也可在Windows NT下组合使用下述常数标记:
      SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY
      hTemplateFile Long, 假设不为零,则指定一个文件句柄。新文件将从这个文件里复制扩展属性

     
    返回值

      如运行成功,则返回文件句柄。

      INVALID_HANDLE_VALUE表示出错,会设置GetLastError。即使函数成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS

    (以上摘自百度百科)

     

            实例:

            1、直接在函数内指定文件地址:

    1. void playCEwav()
    2. {
    3.     CHAR *pBuffer;
    4.     DWORD RSize;
    5.     int fileSize = 0;
    6.     int i;
    7.     HANDLE hOpenFile = (HANDLE)CreateFile(L"E://a.text", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
    8.     if (hOpenFile == INVALID_HANDLE_VALUE)
    9.     {
    10.         hOpenFile = NULL;
    11.         MessageBoxA(NULL, "Can not open the file""Playwav", MB_OK);
    12.     }
    13.     fileSize = GetFileSize(hOpenFile, NULL);
    14.     pBuffer = (CHAR *) malloc(fileSize);
    15.     ReadFile(hOpenFile, pBuffer, fileSize, &RSize, NULL);
    16.     //可将pBuffer显示在某区域或写入还有一个文件来检查读出是否正确
    17.     free(pBuffer);
    18. }

     

              2、把文件地址通过參数传入:

    1. void playwav(TCHAR * path)
    2. {
    3.     CHAR *pBuffer;
    4.     DWORD RSize;
    5.     int fileSize = 0;
    6.     int i;
    7.     TCHAR szPath[100];
    8.     memset(szPath, 0, sizeof(szPath));
    9.     _tcscpy(szPath, path);
    10.     HANDLE hOpenFile = (HANDLE)CreateFile(szPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
    11.     if (hOpenFile == INVALID_HANDLE_VALUE)
    12.     {
    13.         hOpenFile = NULL;
    14.         MessageBoxA(NULL, "Can not open the file""Playwav", MB_OK);
    15.     }
    16.     fileSize = GetFileSize(hOpenFile, NULL);
    17.     pBuffer = (CHAR *) malloc(fileSize);
    18.     ReadFile(hOpenFile, pBuffer, fileSize, &RSize, NULL);
    19.     free(pBuffer);
    20. }

     

     

  • 相关阅读:
    POJ-1189 钉子和小球(动态规划)
    POJ-1191-棋盘分割(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4055230.html
Copyright © 2011-2022 走看看