文章详情
C++磁盘文件读写操作常用方法
Posted on 2018-02-08 04:07:23 by 主打一个C++
第一种:
c方法(写出到文件)
BOOL WriteFile(const char* _filename, const void* _data, size_t _size,const char* _type = "wb")
{
FILE* fp = fopen(_filename, _type);
if (fp == NULL)
return FALSE;
fwrite(_data, 1, _size, fp);
fclose(fp);
return TRUE;
}
//读文件(完整文件读取例子)
#include <cstdio>
#include <cstdlib>
BOOL ReadFile(const char* _filename, void** _data, size_t* _size, const char* _type = "rb")
{
FILE* fp = fopen(_filename, _type);
if (fp == NULL)
return FALSE;
fseek(fp, 0, SEEK_END); // 移动文件指针到文件末尾
*_size = ftell(fp); // 获取文件大小
fseek(fp, 0, SEEK_SET); // 重置文件指针回到文件开头
*_data = malloc(*_size); // 为文件内容分配内存
if (*_data == NULL)
{
fclose(fp);
return FALSE; // 内存分配失败
}
fread(*_data, 1, *_size, fp); // 读取文件内容
fclose(fp);
return TRUE;
}
第二种:
windows(读写例子)
//打开或创建
BOOL FUN_FileOpen(HANDLE* _handle, PCWSTR _filename)
{
*_handle = CreateFileW(_filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (*_handle == INVALID_HANDLE_VALUE)
return FALSE;
return TRUE;
}
//读文件内容
BOOL FUN_FileRead(HANDLE _handle, void* _buffer, size_t _size, size_t* _bytesRead)
{
DWORD dwRead = 0;
if (!ReadFile(_handle, _buffer, _size, &dwRead, NULL))
return FALSE;
if (bytesRead != NULL)
*_bytesRead = dwRead;
return TRUE;
}
//写文件内容
BOOL FUN_FileWriteChar(HANDLE _handle, const void* _data, size_t _size)
{
DWORD dwWritten = 0;
if (!WriteFile(_handle, _data, _size, &dwWritten, NULL)) return FALSE;
return (dwWritten != _size)
}
//关闭文件
BOOL FUN_FileClose(HANDLE _handle)
{
if (!CloseHandle(_handle))
return FALSE;
return TRUE;
}
第三种:
c++17(读写二进制例子)
#include <fstream>
#include <vector>
//读
bool ReadBinaryFile(const std::string& filename, std::vector<char>& buffer) {
std::ifstream file(filename, std::ios::binary);
if (!file) {
return false; // 无法打开文件
}
// 将文件内容读取到缓冲区
file.seekg(0, std::ios::end);
size_t size = file.tellg();
file.seekg(0, std::ios::beg);
buffer.resize(size);
file.read(buffer.data(), size);
return true; // 成功读取文件
}
//写
bool WriteBinaryFile(const std::string& filename, const std::vector<char>& buffer) {
std::ofstream file(filename, std::ios::binary);
if (!file) {
return false; // 无法打开文件
}
// 将缓冲区内容写入文件
file.write(buffer.data(), buffer.size());
return true; // 成功写入文件
}
*转载请注明出处:原文链接:https://cpp.vin/page/75.html