[置顶] CreateFile、ReadFile、WriteFile和fread、fwrite两种读写文件的方法
2017-08-27 11:50
525 查看
相关函数的使用可以查看MSDN上的说明文档。本文只提供实例。
程序需包含:#include “Windows.h”文件
方法一、采用:CreateFile、ReadFile、WriteFile
DWORD dwFileSize = 0;
BYTE* buffer = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
hFile = CreateFile("D:\\12123.jpg",GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
cout<<"Create File Failed !"<<endl;
return 0;
}
else
{
dwFileSize = GetFileSize(hFile,NULL);
//LARGE_INTEGER lFileSize;
//GetFileSizeEx(hFile,&lFileSize);//若文件长度超过0xFFFFFFFF,使用GetFileSizeEx。
cout<<"文件大小 "<<dwFileSize<<endl;
buffer = new BYTE[dwFileSize];
if (buffer == NULL)
{
cout<<"Create buffer error !"<<endl;
return 0;
}
ZeroMemory(buffer,dwFileSize);
DWORD dwReadSize = 0,dwReadTotal = 0;
while (dwReadTotal < dwFileSize)
{
ReadFile(hFile,buffer + dwReadTotal,dwFileSize - dwReadSize,&dwReadSize,NULL);
dwReadTotal += dwReadSize;
}
cout<<"总共读取的文件大小 "<<dwReadTotal<<endl;
}
hFile = CreateFile("D:\\222.jpg",GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
cout<<"Create File Failed -2 !"<<endl;
delete []buffer;
buffer = NULL;
return 0;
}
else
{
DWORD dwWriteTotal = 0,dwWriteSize = 0;
while (dwWriteTotal < dwFileSize)
{
WriteFile(hFile,buffer + dwWriteTotal,dwFileSize,&dwWriteSize,NULL);
dwWriteTotal += dwWriteSize;
}
}
delete []buffer;
buffer = NULL;
方法二、采用fread、fwrite
DWORD dwFileSize = 0;
WIN32_FIND_DATA FileInfo;
ZeroMemory(&FileInfo,sizeof(WIN32_FIND_DATA));
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFile("D:\\12123.jpg",&FileInfo);
if(hFind != INVALID_HANDLE_VALUE)
{
dwFileSize = FileInfo.nFileSizeLow ;
}
FindClose(hFind);
BYTE* buffer = new BYTE[dwFileSize];
if (buffer == NULL)
{
cout<<"Create buffer error !"<<endl;
return 0;
}
ZeroMemory(buffer,dwFileSize);
FILE *f = NULL;
fopen_s(&f,"D:\\12123.jpg","rb");
if (f == NULL)
{
delete [] buffer;
buffer = NULL;
cout<<"fopen_s error -1 !"<<endl;
return 0;
}
else
{
fread(buffer,dwFileSize,1,f);
}
fclose(f);
f = NULL;
fopen_s(&f,"D:\\333.jpg","wb");
if (f == NULL)
{
cout<<"fopen_s error -2 !"<<endl;
return 0;
}
if (fwrite(buffer,dwFileSize,1,f) < 1){
cout<<"fwrite error !"<<endl;
}
fclose(f);
f = NULL;
程序需包含:#include “Windows.h”文件
方法一、采用:CreateFile、ReadFile、WriteFile
DWORD dwFileSize = 0;
BYTE* buffer = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
hFile = CreateFile("D:\\12123.jpg",GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
cout<<"Create File Failed !"<<endl;
return 0;
}
else
{
dwFileSize = GetFileSize(hFile,NULL);
//LARGE_INTEGER lFileSize;
//GetFileSizeEx(hFile,&lFileSize);//若文件长度超过0xFFFFFFFF,使用GetFileSizeEx。
cout<<"文件大小 "<<dwFileSize<<endl;
buffer = new BYTE[dwFileSize];
if (buffer == NULL)
{
cout<<"Create buffer error !"<<endl;
return 0;
}
ZeroMemory(buffer,dwFileSize);
DWORD dwReadSize = 0,dwReadTotal = 0;
while (dwReadTotal < dwFileSize)
{
ReadFile(hFile,buffer + dwReadTotal,dwFileSize - dwReadSize,&dwReadSize,NULL);
dwReadTotal += dwReadSize;
}
cout<<"总共读取的文件大小 "<<dwReadTotal<<endl;
}
hFile = CreateFile("D:\\222.jpg",GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
cout<<"Create File Failed -2 !"<<endl;
delete []buffer;
buffer = NULL;
return 0;
}
else
{
DWORD dwWriteTotal = 0,dwWriteSize = 0;
while (dwWriteTotal < dwFileSize)
{
WriteFile(hFile,buffer + dwWriteTotal,dwFileSize,&dwWriteSize,NULL);
dwWriteTotal += dwWriteSize;
}
}
delete []buffer;
buffer = NULL;
方法二、采用fread、fwrite
DWORD dwFileSize = 0;
WIN32_FIND_DATA FileInfo;
ZeroMemory(&FileInfo,sizeof(WIN32_FIND_DATA));
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFile("D:\\12123.jpg",&FileInfo);
if(hFind != INVALID_HANDLE_VALUE)
{
dwFileSize = FileInfo.nFileSizeLow ;
}
FindClose(hFind);
BYTE* buffer = new BYTE[dwFileSize];
if (buffer == NULL)
{
cout<<"Create buffer error !"<<endl;
return 0;
}
ZeroMemory(buffer,dwFileSize);
FILE *f = NULL;
fopen_s(&f,"D:\\12123.jpg","rb");
if (f == NULL)
{
delete [] buffer;
buffer = NULL;
cout<<"fopen_s error -1 !"<<endl;
return 0;
}
else
{
fread(buffer,dwFileSize,1,f);
}
fclose(f);
f = NULL;
fopen_s(&f,"D:\\333.jpg","wb");
if (f == NULL)
{
cout<<"fopen_s error -2 !"<<endl;
return 0;
}
if (fwrite(buffer,dwFileSize,1,f) < 1){
cout<<"fwrite error !"<<endl;
}
fclose(f);
f = NULL;
相关文章推荐
- fstream与 C 风格(例如fread 和 fwrite )两种读写文件方法的效率比较
- fstream与 C 风格(例如fread 和 fwrite )两种读写文件方法的效率比较
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法 分类: 磁盘的扇区读写 2015-04-29 10:50 358人阅读 评论(0) 收藏
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
- 使用API进行文件读写——CreateFile,ReadFile,WriteFile等
- C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind
- 关于标准C文件流读写问题:fopen,fread,fwrite,fclose的一些注意事项
- C#读写txt文件的两种方法介绍
- java读写CSV文件的两种方法
- c++文件读写之fread和fwrite
- C#读写txt文件的两种方法介绍
- Linux下C语言的文本文件读写(fputc,fgetc,fwrite,fread对文件读写操作)
- C#读写txt文件的两种方法介绍
- C++文件读写函数之——fgets和fputs、fread和fwrite、fscanf和fprintf
- 文件读写操作之一 <二进制读写操作> fwrite与fread