`
milk_nenu
  • 浏览: 13596 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

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. }
分享到:
评论

相关推荐

    detours例子

    Detours 是微软开发的一个开源库,它提供了一种在Windows平台上进行函数钩子...对于新手来说,`detourAPIHook` 这个例子是一个很好的起点,能够帮助理解 Detours 库的基本用法,并逐步熟悉函数钩子这一强大的技术。

    MFC加载和显示图片的几个函数和例子

    MFC 加载和显示图片的几个函数与例子使用 IPicture::Render 绘制图片的方法说明: Render 函数是 MFC 中的一个重要函数,用于绘制图片。该函数的原型为: HRESULT Render( HDC hdc, //Handle of device context ...

    Delphi API 串口通信 多线程例子.rar

    API的使用则需要对Windows API有深入理解,例如,你可以调用`CreateFile`函数打开串口,`WriteFile`和`ReadFile`用于发送和接收数据,`SetCommState`来改变串口状态,`SetupComm`初始化缓冲区大小等。这些API函数...

    C# USB操作类和Demo例子 USB操作类

    例如,使用`CreateFile`函数打开设备句柄,然后通过`DeviceIoControl`或`WriteFile/ReadFile`进行通信。 4. **错误处理**:在USB操作中,错误处理是必不可少的,因为硬件交互可能出现各种问题,如设备未响应、权限...

    C#串口操作小例子,P/Invoke

    1. **SerialPort类**:这是C#中处理串口的主要类,提供了打开、关闭串口,设置串口参数,以及发送和接收数据的方法。例如,`SerialPort.Open()`用于打开串口,`SerialPort.BaudRate`用于设置波特率,`SerialPort....

    两个VC Modbus通信例子源代码

    对于开发者来说,直接查看和分析实际运行的代码是快速学习和掌握技术的好方法。 标签“Modbus”进一步强调了这个压缩包的核心内容,即与Modbus协议相关的编程实践。Modbus协议基于ASCII或RTU(远程终端单元)报文...

    有名管道例子,简单易懂

    有名管道(Named Pipe)是Windows操作系统中的一种进程间通信(IPC,Inter-Process ...这个例子对于学习和理解Windows IPC机制非常有帮助,尤其是对初学者来说,简单易懂的代码能够快速掌握有名管道的使用方法。

    几个内存泄漏的例子

    在使用如`CreateEvent`、`CreateFile`、`CreateFileMapping`等系统API时,创建的资源需要手动释放。应始终记住调用对应的释放函数(如`CloseHandle`)来避免内存泄漏。使用完毕后立即释放资源是良好的编程习惯。 例...

    CreateFile函数扩展用法易语言源码-易语言

    在本文中,我们将深入探讨`CreateFile`函数的使用方法,以及如何在易语言中实现其扩展功能,如在程序关闭时自动删除指定文件。 `CreateFile`函数的基本语法如下: ```e 句柄 = CreateFile(文件名, 访问模式, 共享...

    C#使用SerialPort和API串口的例子

    在多线程环境中,特别是当需要更新UI时,直接操作UI控件可能会引发跨线程操作错误,因此建议使用委托或`Control.BeginInvoke`方法来确保线程安全。 例如,以下是一个使用API进行串口通信的简单示例: ```csharp ...

    采用Http更新程序的例子(原创)

    可以使用CreateFile和WriteFile函数创建并写入文件。 7. **关闭连接**:完成下载后,要确保正确关闭所有打开的句柄,包括InternetCloseHandle函数,以释放资源。 8. **执行安装**:下载完成后,程序可以调用系统...

    VC串口通信例子

    总的来说,"VC串口通信例子"是一个学习串口通信编程的好素材,通过实践理解串口通信的原理和VC++中的实现方法。它可以帮助开发者掌握如何在Windows环境下构建可靠的串口通信系统,这对于嵌入式开发、自动化设备控制...

    Win32(File/Thread/HeapAlloc)等小例子

    "Win32(File/Thread/HeapAlloc)等小例子"这个压缩包文件包含了一系列基于Win32 API的小型示例程序,主要涉及文件操作、线程管理和内存管理,非常适合初学者入门或对Win32 API不熟悉的开发者进行快速复习。...

    c语言程序设计文件操作方法示例(CreateFile和fopen)

    本示例将介绍两种不同的文件操作方法:一种是基于Windows API的CreateFile和相关函数,另一种是C标准库中的流式文件操作,即fopen函数。 1. **CreateFile方法**: CreateFile函数是Windows API提供的用于创建、...

    PC机和以太网转串口设备通讯的例子

    在VC++中,可以使用Windows API函数如CreateFile、ReadFile和WriteFile来操作串口。你需要了解串口的配置参数,如波特率、数据位、停止位、校验位等,并且知道如何设置和读取这些参数。同时,串口的打开、关闭、读写...

    vc动态库例子

    2. **动态库使用方法**: - 在需要使用动态库的项目中,添加对DLL的引用。这通常通过“项目属性”->“配置属性”->“链接器”->“输入”下的“附加依赖项”完成,添加DLL的名称(不带.dll扩展名)。 - 使用`...

    Hook Api VC 实现

    VC++中的`Detour`库就是这种机制的一个例子,它允许开发者轻松地修改IAT。 4. **DETours(Detour Library)**:这是一个微软提供的开源库,专门用于API Hook。它提供了一种相对简单的方式来实现函数替换,通过插入...

    WIN32编程的C++例子源码.rar_WIN32编程的C++例子源码_win32 开发 下载_win32 源码

    7. **文件操作**:使用`CreateFile`、`ReadFile`和`WriteFile`等API进行文件读写。 8. **注册表操作**:使用`RegOpenKeyEx`、`RegQueryValueEx`和`RegSetValueEx`等函数对注册表进行读写。 9. **事件处理**:响应...

    API的小例子

    从给定的代码片段来看,这是一个使用Windows API进行串行通信的例子,主要展示了如何通过Windows API函数来控制和操作串行端口(COM1),实现数据的发送与接收。以下是对这个示例中涉及的关键知识点的详细解析: ### ...

    串口软件开发的源代码例子

    这个例子不依赖于MSComm控件,而是直接使用Windows API函数进行串口操作,如`CreateFile`、`SetCommState`、`ReadFile`和`WriteFile`等。这种方法更底层,灵活性更高,但需要对Win32 API有深入理解。 5. **项目5 -...

Global site tag (gtag.js) - Google Analytics