您的位置:首页 > 其它

[置顶] 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐