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