L o a d i n g . . .
主打一个C++
文章详情

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

作者近期文章
  • 随手笔记
  • 主打一个C++   2025-01-11 20:02:01
  • 都2000000025年了。还有不能随意访问guthub的,仔细看。在国内其实是可以正常访问的,gfw并没屏蔽。这里给出其中一个简单直接的方法稳定访问。1. 随便百度一个”dn
提示
×
确定
数据库执行: 8次 总耗时: 0.01s
页面加载耗时: 



wechat +447752296473
wechat cpp-blog