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

本文由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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值