[Win32]ReadFile/WriteFile 的文件同步读写

本文详细介绍了Win32 API中的CreateFile和ReadFile/WriteFile函数在进行文件同步读写时的工作原理和参数设置。通过示例和解析,解释了同步读写的特点,以及如何正确使用CREATE_ALWAYS与OPEN_ALWAYS标志。同时,讨论了文件句柄、共享模式和文件属性等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文由CSDN用户zuishikonghuan所作,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/46926787

先来看看我很早之前写的两个函数,他们实现了简单的直接读写文件,读文件是把文件一股脑都读进来,写文件是覆盖原来的文件写入

//参数:文件名,输出的字符串指针
//返回值:读取的大小
DWORD MyReadFile(char* fn, char* &out)
{
	HANDLE pfile;
	pfile = CreateFile(fn, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//创建文件内核对象
	if (pfile == INVALID_HANDLE_VALUE)//打开文件失败
	{
		CloseHandle(pfile);
		return 0;
	}
	DWORD filesize = GetFileSize(pfile, NULL);//获取文件大小
	char* buffer = new char[filesize + 1];//申请内存,最后一位为字符串的结束符。
	DWORD readsize;
	if (ReadFile(pfile, buffer, filesize, &readsize, NULL) == 0)
	{
		CloseHandle(pfile);
		return 0;
	}
	buffer[filesize] = 0;
	out = buffer;
	//delete [] buffer;
	//注意这里需要自己释放内存
	CloseHandle(pfile);
	return filesize;
}

//参数:文件名,欲写入的字符串
//返回值:写入的大小
DWORD MyWriteFile(char* fn, char* in)
{
	HANDLE pfile;
	pfile = CreateFile(fn, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if (pfile == INVALID_HANDLE_VALUE)
	{
		CloseHandle(pfile);
		return 0;
	}
	DWORD size;
	if (WriteFile(pfile, in, strlen(in), &size, NULL) == 0){
		CloseHandle(pfile);
		return 0;
	}
	CloseHandle(pfile);
	return size;
}

注意,只能在Ansi版本上使用,如果是unicode版本请:

方法一:改变Api:CreateFile->CreateFileA

方法二:将文件名称从char*改为wchar_t*或者改为LPCTSTR

下面来详细说一说ReadFile/WriteFile 的文件同步读写

1。何为“同步读写”?

同步读写是指读写过程中线程是“阻塞”的,我在API Caller,计算机网络和算法 一文中(http://blog.csdn.net/zuishikon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值