CreateFile、ReadFile、WriteFile和fread、fwrite两种读写文件的方法
相关函数的使用可以查看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;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。