函数原型:
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、直接在函数内指定文件地址:
-
void playCEwav()
- {
-
CHAR *pBuffer;
-
DWORD RSize;
-
int fileSize = 0;
-
int i;
-
HANDLE hOpenFile =
(HANDLE)CreateFile(L"E:\\a.text", GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
-
if (hOpenFile == INVALID_HANDLE_VALUE)
- {
- hOpenFile = NULL;
- MessageBoxA(NULL, "Can not open the file", "Playwav", MB_OK);
- }
- fileSize = GetFileSize(hOpenFile, NULL);
- pBuffer = (CHAR *) malloc(fileSize);
- ReadFile(hOpenFile, pBuffer, fileSize, &RSize, NULL);
- //可将pBuffer显示在某区域或写入另一个文件来检查读出是否正确
- free(pBuffer);
- }
2、把文件地址通过参数传入:
-
void playwav(TCHAR * path)
- {
-
CHAR *pBuffer;
-
DWORD RSize;
-
int fileSize = 0;
-
int i;
-
TCHAR szPath[100];
- memset(szPath, 0, sizeof(szPath));
- _tcscpy(szPath, path);
-
HANDLE hOpenFile =
(HANDLE)CreateFile(szPath, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, NULL, NULL);
-
if (hOpenFile == INVALID_HANDLE_VALUE)
- {
- hOpenFile = NULL;
- MessageBoxA(NULL, "Can not open the file", "Playwav", MB_OK);
- }
- fileSize = GetFileSize(hOpenFile, NULL);
- pBuffer = (CHAR *) malloc(fileSize);
- ReadFile(hOpenFile, pBuffer, fileSize, &RSize, NULL);
- free(pBuffer);
- }
分享到:
相关推荐
Detours 是微软开发的一个开源库,它提供了一种在Windows平台上进行函数钩子...对于新手来说,`detourAPIHook` 这个例子是一个很好的起点,能够帮助理解 Detours 库的基本用法,并逐步熟悉函数钩子这一强大的技术。
MFC 加载和显示图片的几个函数与例子使用 IPicture::Render 绘制图片的方法说明: Render 函数是 MFC 中的一个重要函数,用于绘制图片。该函数的原型为: HRESULT Render( HDC hdc, //Handle of device context ...
API的使用则需要对Windows API有深入理解,例如,你可以调用`CreateFile`函数打开串口,`WriteFile`和`ReadFile`用于发送和接收数据,`SetCommState`来改变串口状态,`SetupComm`初始化缓冲区大小等。这些API函数...
例如,使用`CreateFile`函数打开设备句柄,然后通过`DeviceIoControl`或`WriteFile/ReadFile`进行通信。 4. **错误处理**:在USB操作中,错误处理是必不可少的,因为硬件交互可能出现各种问题,如设备未响应、权限...
1. **SerialPort类**:这是C#中处理串口的主要类,提供了打开、关闭串口,设置串口参数,以及发送和接收数据的方法。例如,`SerialPort.Open()`用于打开串口,`SerialPort.BaudRate`用于设置波特率,`SerialPort....
对于开发者来说,直接查看和分析实际运行的代码是快速学习和掌握技术的好方法。 标签“Modbus”进一步强调了这个压缩包的核心内容,即与Modbus协议相关的编程实践。Modbus协议基于ASCII或RTU(远程终端单元)报文...
有名管道(Named Pipe)是Windows操作系统中的一种进程间通信(IPC,Inter-Process ...这个例子对于学习和理解Windows IPC机制非常有帮助,尤其是对初学者来说,简单易懂的代码能够快速掌握有名管道的使用方法。
在使用如`CreateEvent`、`CreateFile`、`CreateFileMapping`等系统API时,创建的资源需要手动释放。应始终记住调用对应的释放函数(如`CloseHandle`)来避免内存泄漏。使用完毕后立即释放资源是良好的编程习惯。 例...
在本文中,我们将深入探讨`CreateFile`函数的使用方法,以及如何在易语言中实现其扩展功能,如在程序关闭时自动删除指定文件。 `CreateFile`函数的基本语法如下: ```e 句柄 = CreateFile(文件名, 访问模式, 共享...
在多线程环境中,特别是当需要更新UI时,直接操作UI控件可能会引发跨线程操作错误,因此建议使用委托或`Control.BeginInvoke`方法来确保线程安全。 例如,以下是一个使用API进行串口通信的简单示例: ```csharp ...
可以使用CreateFile和WriteFile函数创建并写入文件。 7. **关闭连接**:完成下载后,要确保正确关闭所有打开的句柄,包括InternetCloseHandle函数,以释放资源。 8. **执行安装**:下载完成后,程序可以调用系统...
总的来说,"VC串口通信例子"是一个学习串口通信编程的好素材,通过实践理解串口通信的原理和VC++中的实现方法。它可以帮助开发者掌握如何在Windows环境下构建可靠的串口通信系统,这对于嵌入式开发、自动化设备控制...
"Win32(File/Thread/HeapAlloc)等小例子"这个压缩包文件包含了一系列基于Win32 API的小型示例程序,主要涉及文件操作、线程管理和内存管理,非常适合初学者入门或对Win32 API不熟悉的开发者进行快速复习。...
本示例将介绍两种不同的文件操作方法:一种是基于Windows API的CreateFile和相关函数,另一种是C标准库中的流式文件操作,即fopen函数。 1. **CreateFile方法**: CreateFile函数是Windows API提供的用于创建、...
在VC++中,可以使用Windows API函数如CreateFile、ReadFile和WriteFile来操作串口。你需要了解串口的配置参数,如波特率、数据位、停止位、校验位等,并且知道如何设置和读取这些参数。同时,串口的打开、关闭、读写...
2. **动态库使用方法**: - 在需要使用动态库的项目中,添加对DLL的引用。这通常通过“项目属性”->“配置属性”->“链接器”->“输入”下的“附加依赖项”完成,添加DLL的名称(不带.dll扩展名)。 - 使用`...
VC++中的`Detour`库就是这种机制的一个例子,它允许开发者轻松地修改IAT。 4. **DETours(Detour Library)**:这是一个微软提供的开源库,专门用于API Hook。它提供了一种相对简单的方式来实现函数替换,通过插入...
7. **文件操作**:使用`CreateFile`、`ReadFile`和`WriteFile`等API进行文件读写。 8. **注册表操作**:使用`RegOpenKeyEx`、`RegQueryValueEx`和`RegSetValueEx`等函数对注册表进行读写。 9. **事件处理**:响应...
从给定的代码片段来看,这是一个使用Windows API进行串行通信的例子,主要展示了如何通过Windows API函数来控制和操作串行端口(COM1),实现数据的发送与接收。以下是对这个示例中涉及的关键知识点的详细解析: ### ...
这个例子不依赖于MSComm控件,而是直接使用Windows API函数进行串口操作,如`CreateFile`、`SetCommState`、`ReadFile`和`WriteFile`等。这种方法更底层,灵活性更高,但需要对Win32 API有深入理解。 5. **项目5 -...