<Win32 API> 文件操作CreateFile/ReadFile/WriteFile

[Win32]ReadFile/WriteFile 的文件同步读写 先来看看我很早之前写的两个函数,他们实现了简单的直接读写文件,读文件是把文件一股脑都读进来,写文件是覆盖原来的文件写入 //参数:文件名,输出的字符串指针 //返回值:读取的大小 DWORD MyReadFile(char* fn, char* &out) { HANDLE pfile; pfile = CreateFile(fn, GENERIC_READ, 0, NULL, OPEN_E 阅读详情

1. CreateFile/ReadFile/WriteFile

CreateFile函数原型:

HANDLE CreateFile(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);

lpFileName: 以'\0'结尾的文件、COM口等路径,如果是文件,可以是完整路径也可以是相对路径。

dwDesiredAccess: 访问文件的想要获取的权限,多个使用则使用“|”相连:

    GENERIC_EXECUTE:执行的权限,如Linux里面的-x

    GENERIC_READ:读的权限,如Linux里面的-r

    GENERIC_WRITE:写的权限,如Linux里面的-w

dwSharMode:共享模式, 设为

    0,则是不共享

    FILE_SHARE_READ: 共享读

    FILE_SHARE_WRITE:共享写

lpSecurityAttributes: 未使用

dwCreationDisposition: 文件不存在的时候的创建选项,如fopen里面的 “r", "w", "b"等。

   CREATE_ALWAYS:总是创建,不存在则创建,存在则覆盖,原文件内容丢失;

   OPEN_EXISTING:文件一定要存在,否则失败

   CREATE_NEW:不存在则创建,存在则不创建并返回失败

   OPEN_ALWAYS:如果存在则打开文件,不存在则创建文件

   TRUNCATE_EXISTING:如果存在则打开文件并清空文件内容,至少要求GENERIC_WRITE权限,不存在则返回失败;

dwFlagsAndAttributes: 文件的属性

   FILE_ATTRIBUTE_NORMAL:默认属性,没有被设置属性

   FILE_ATTRIBUTE_READONLY:只读文件

   FILE_ATTRIBUTE_HIDDEN:隐藏文件

   具体查看官方API

hTemplateFile: 忽略

返回值:INVALID_HANDLE_VALUE, 失败,其他有效句柄则是成功,打开的句柄需要使用CloseHandle关闭。


ReadFile函数原型:

BOOL ReadFile(
  HANDLE hFile,
  LPVOID lpBuffer,
  DWORD nNumberOfBytesToRead,
  LPDWORD lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);

hFile:文件句柄

lpBuffer: 存放数据的缓冲区

nNumberOfBytesToRead: 预设读取字节数

lpNumberOfBytesRead: 实际读取字节数

lpOverlapped: 不支持,设为NULL

返回值:0:失败,非0,成功。

如果返回非0,而lpNumberOfBytesRead所指向的值是0,则表示文件指针已经超出了文件范围。


WriteFile函数原型:

BOOL WriteFile( 
  HANDLE hFile, 
  LPCVOID lpBuffer, 
  DWORD nNumberOfBytesToWrite, 
  LPDWORD lpNumberOfBytesWritten, 
  LPOVERLAPPED lpOverlapped
); 

参照 ReadFile既可。

2. 文件/文件夹操作


CopyFile:复制文件

DeleteFile:删除文件

CreateDirectory:创建文件夹

RemoveDirectory: 删除文件夹

3. 测试代码

//////////////////////////////////////////////////////////////////////////
// Win32 文件操作
void TestCreateFile()
{
	// 创建文件
	HANDLE hFile = CreateFile(TEXT("test.txt"),  // 在当前文件夹创建test.txt文件
					GENERIC_WRITE, 0, NULL,
					CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);

	if (INVALID_HANDLE_VALUE == hFile)	// 判断文件是否创建成功
	{
		cout << "创建文件失败" << endl;
		return;
	}

	DWORD dwBytesWriten = 0;
	char buffer[50] = {"my test string"};
	int nRet = WriteFile(hFile, buffer, strlen(buffer), &dwBytesWriten, NULL);

	cout << "WriteFile返回值:" << nRet << endl;
	cout << "实际写入的字节数:" << dwBytesWriten << endl;

	CloseHandle(hFile);

	// 读取文件
	hFile = CreateFile(TEXT("test.txt"), 
				GENERIC_READ, 0, NULL, 
				OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
	if (INVALID_HANDLE_VALUE == hFile)	// 判断文件是否创建成功
	{
		cout << "打开文件失败" << endl;
		return;
	}
	DWORD dwBytesRead = 0;
	memset(buffer, 0, 50);
	nRet = ReadFile(hFile, buffer, 50, &dwBytesRead, NULL);

	cout << "ReadFile返回值: " << nRet << endl;
	cout << "实际读取的字节数:" << dwBytesRead << endl;
	cout << "读取到的字符: " << buffer << endl;

	CloseHandle(hFile);
}

运行结果:


C++ Win32API ReadFile()读取文件实例   #include  #include  #include  #include  #include  void main(){    unsigned long lpNumber=0;    char lpBuffer[50]="";//文件读取的内容    char IP_path[80]="";         getcwd(I 阅读详情

相关推荐

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

Win32API操作文件

在Windows编程中CreateFile函数是用得非常多的,不仅可以打开文件,还可以打开管道、邮槽、通信资源、磁盘设备(早期Windows),控制台、目录。该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的I/O。

qq_54169998的博客 2282

深入解析SDC时钟约束:从create_clock到set_clock_groups的实战指南

本文深入解析SDC时钟约束,从create_clock到set_clock_groups的实战应用,帮助数字芯片设计工程师掌握时序约束的核心技巧。通过详细讲解时钟三要素(波形定义、不确定性和时钟关系)及实战案例,提升时钟约束的精准性和效率,避免常见设计陷阱。

weixin_29274337的博客 1078

Python笔记-windows管道通信

这里主要是两个进程中共享数据,本质是共享内存。采用I/O流的方式来访问。 有两种管道: ①匿名管道:父子进程间通信; ②命名管道:两个进程间通信。 Python代码如下: server.py # -*- coding: utf-8 -*- import win32file import win32pipe PIPE_NAME = r"\\.\pipe\test_pip" PIPE_BUFFER_SIZE = 65535 # PIPE_ACCESS_DUPLEX 双向通信 named.

IT1995的博客 3361

图形学基础|屏幕空间反射(SSR)

图形学基础|屏幕空间反射(SSR) 文章目录图形学基础|屏幕空间反射(SSR)一、前言二、反射技术概述2.1 环境贴图反射2.2 IBL反射2.3 平面反射(Planar Reflections)2.4 屏幕空间反射(Screen Space Reflection)2.4.1 SSR的基本原理2.4.2 SSR的优缺点三、SSR(Screen-Space Reflection)实现3.1 Efficient GPU Screen-Space Ray Tracing3.1.1 2D Raymarching v

【黑键】 3万+

[华为ensp]双核心的园区网

(给部分只会emm......借鉴的朋友提个醒,在group-member e0/0/2 to e0/0/20是所选,所以到了p l t那会给2-20端口都配置上trunk,别紧张,不是你问题)完成上述配置后,PC1可以ping通HTTP2服务器,Client1可以访问HTTP2服务器的HTTP站点,如果不能就要检查上述是否正确。本次实验主要目的是采用双核心的冗余网络,采用MSTP和VRRP技术,在核心层交换机上配置SC1上配置OSPF协议。SC1交换机上配置VRRP。在SC1上配置DHCP。

2301_78859499的博客 1416

win32 CreateFile

1 参考资料: msdn: 函数定义 https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx 例子:Opening a File for Reading or Writing https://msdn.microsoft.com/en-us/library/windows/desktop/...

abc 3148

LCD、LED、OLED、Mini LED、Micro LED、全阵列LED、QLED、QD-OLED、QNED、AMOLED是什么意思?

LCD(液晶显示器,Liquid Crystal Display)定义:LCD 是一种利用液晶材料控制光线通过的显示技术,需依靠背光源(如冷阴极荧光灯 CCFL 或 LED)照亮液晶层以形成图像。技术原理:液晶分子在电场作用下改变排列,控制背光通过的强度和颜色。液晶本身不发光,需外部光源。特点:结构包括背光层、液晶层、彩色滤光片和偏光片。响应时间较慢,黑色表现因背光漏光而偏灰。LED(发光二极管显示,Light Emitting Diode)定义。

中国最威武的城市!武功军威-武威,铁骨铮铮! 3424

Win32 WriteFile and ReadFile

HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, // 文件路径 __in DWORD dwDesiredAccess, // 访问权限,GENERIC_READ | GENERIC_WRITE __in DWORD dwS...

318

硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接

在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。

FCZlll的博客 2645

Silvaco TCAD仿真4——DeckBuild实战:从示例库到自定义设计

本文详细介绍了Silvaco TCAD仿真工具DeckBuild的实战应用,从示例库的使用到自定义设计的全过程。通过具体案例和参数修改技巧,帮助用户快速掌握TCAD仿真技术,提升半导体器件设计的效率和精度。特别适合需要从基础入门到进阶操作的工程师和研究人员。

weixin_29284657的博客 434

win32 ReadFile 读文件到最后 (异步方式)

参考网页 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa365690(v=vs.85).aspx VS2010 建立一个console 工程,设置编码格式为: 代码如下: #include "stdafx.h" #include &lt;windows.h&gt; #include &lt;tchar....

abc 5339

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证 目录回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证基本介绍划分原理留一划分交叉验证K折交叉数据下载程序设计参考资料致谢 基本介绍 在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,有如下常用的方法: 第一种是最简单的,也是很容易就想到的。我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 6375

python readfile 管道_使用win32的正确方法是什么文件.ReadFile从管道中获取输出?

我正在使用pywin32扩展来访问Python下的win32api。我是用Python编写Windows编程的新手——我是一个POSIX的人——所以我可能是在用一种头脑简单的方式做事。在我试图正确地使用win32file.ReadFile函数,在解释可能的结果代码时遇到了一些问题。在我这样调用函数:result, data = win32file.ReadFile(child_stdout_r, ...

weixin_39604280的博客 605

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

windows32 api文件操作

                                              本文有大量链接引用.如触犯了您的利益请下方留言前言熟悉的文件打开操作有open、fopen、createfile、CFile类他们的关系(论坛上出现过的问题):CFile 或者 C++的fstrem或者C lib fopen,终究都会调用Win32 APICreateFileCreateFile是操作系统提...

她的吻让他 8472

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Windows32 API 操作串口时的一些笔记

    之前一直使用微软官方提供的MFC串口控件来实现PC端与嵌入式端的串口通讯,但是最近发现Win7系统以上的默认已经不支持这个串口库了,需要自行加载,为了方便发布和代码高效,我找了一个空闲的时间去重新封装了一个基于WIN32 API的一个串口 类,主要是发现网上大部分都是通过Write()来阻塞的,不能说你不高效什么的,但是Windows是基于事件驱动的,这样你只能读到数据,而串口还有很多事件...

perfect_to_c__的博客 2370

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WIN32常用API—文件相关操作API(删除指定文件,复制文件,新建/打开文件,移动文件,读取文件,写入文件内容,获取文件大小,创建目录,获取文件或目录的属性、设置文件属性)

WIN32常用API—文件相关操作API(删除指定文件,复制文件,新建/打开文件,移动文件,读取文件,写入文件内容,获取文件大小,创建目录,获取文件或目录的属性、设置文件属性)

m0_62783065的博客 1443

Win32编程1-文件读取

利用Windows的API函数打开文件,读取文件,修改文件。 利用API函数创建注册项和值、读取注册项和值、修改注册项和值。 利用API获取进程信息,创建进程,结束进程。 需求大概了解,页面设计原本打算三个按钮,然后对应三个新窗口,在新窗口实现各自的功能,但想了一下好像没必要,实际用得上的空间感觉没有那么大,把主窗口调大点应该能塞下。(上图为最终成品图)

qq_16119139的博客 829

使用win32 api读文件

代码】使用win32api读文件。

qq_43248127的博客 478

win32 文件写入(包括追加到文件尾)WriteFile CreateFile

// Win32FileIO.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include void writeFile(LPCWSTR filePath,LPCVOID content, int size) { //创建文件 HANDLE hFile = CreateFile(filePath, //创建文件的名称。 GEN

熊老大的专栏 1万+

十四、Win32 API文件操作

1.   Win32 API就是系统调用,偏向底层,像C\C++中的很多函数,比如malloc还有很多文件操作函数都是用Win32 API实现的; 2.   创建文件映射:        a. 同样也是将硬盘中的文件映射到内存,但是没有FILE *指针指向这片内存了,而是只能用一个void *指针来代替,由此可以看到Win32 API对类型的敏感级别非常低,更加偏向底层,偏向硬件;

计算机 1434

win32(7)--文件操作

一、创建/打开文件、读文件、写文件及文件大小获取和文件偏移:CreateFile、ReadFile、WriteFile、GetFileSize、SetFilePointer。 CreateFile:创建/打开文件 HANDLE WINAPI CreateFile( //返回值是句柄,错误返回INVALID_HANDLE_VALUE(-1) _In_ LPCWSTR lpFil

pyx的学习笔记 2684

Win 32 API中对文件的操

1、CreateFile():返回一个句柄,用来标识它所打开或创建的句柄。 创建或打开控制台、通信资源、目录、资源设备、文件、邮槽、管道; HANDLE CreateFile(   LPCTSTR lpFileName, //指向文件名的指针(文件名);   DWORD dwDesiredAccess, //访问模式(写/读)                  GEN

dyz_123456的博客 347

win32 WriteFile

参考网址: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx 写数据到指定的文件或者设备。 这个函数被设计为同步的或者异步的操作。 一个类似的用来只针对异步操作的函数,名字是WriteFileEx 函数原型: BOOL WINAPI WriteFile( _In_ ...

abc 2124

Win32 API: CreateFileA function (fileapi.h)

请求的对文件或设备的访问,可以总结为读、写、都或0表示都不。最常用的值是GENERIC_READ、GENERIC_WRITE, 或读写都有(GENERIC_READ | GENERIC_WRITE)。文件或设备所需要的共享模式,可以是读、写、读写兼有、删除、所有这些兼有,或者是其他值。创造或打开了一个文件或I/O设备,最常用的I/O设备如下: 文件、文件流、文件路径、物理盘、卷、控制台缓冲区、…函数返回一个句柄,该句柄能够被用于访问不同的I/O的文件或设备。要被创造或打开的文件名或设备名。

weixin_43638873的博客 351

CreateFile函数详解

CreateFile The CreateFile function creates or opens the following objects and returns a handle that can be used to accessthe object: files pipes mailslots communications resources disk

cigogo的专栏 3797
上一篇: <Boost> 字符串处理和格式化输出
下一篇: <C/C++> IO流 cout/fstream的使用
_Lulixue_
博客等级 码龄16年 45粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值