Skip to content

文件IO

C++
#include <error.h>
#include <fstream>
#include <iostream>
// binary read/write
/** use fread/fwrite **/
// 1. read file
inputFile_ = fopen(inputFilename_.c_str(), "rb");
if (inputFile_ == nullptr) {
    std::cout << "open error, inputFilename = " << inputFilename_ << "errno: " << strerror(errno) << std::endl;
    return -1;
}
size_t t = fread(buf, sizeof(char), READ_SIZE, inputFile_);
fseek(inputFile_, -START_CODE_SIZE_FRAME, SEEK_CUR);
// when done
if (inputFile_ != nullptr) {
    fclose(inputFile_);
    inputFile_ = nullptr;
}
// 2. write file
outputFile_ = fopen(outputFilename.c_str(), "wb+");
(void)fwrite((uint8_t*)outBuffer->GetBase(), sizeof(char), outBuffer->GetSize(), outputFile_);
(void)fflush(outputFile_);
// when done
if (outputFile_ != nullptr) {
    fclose(outputFile_);
    outputFile_ = nullptr;
}

/** use i/ofstream **/
// 1. read file
testFile_ = std::make_unique<std::ifstream>();
testFile_->open(inputFilename_.c_str(), std::ios::in | std::ios::binary);
if (testFile_->is_open()) {
    (void)testFile_->read(fileBuffer, readLen);
    if (testFile_->eof()) {
        cout << "input file read completed" << endl;
        break;
    }
}
// when done
if (testFile_ != nullptr) {
    testFile_->close();
}
// 2. write file
outFile_ = std::make_unique<std::ofstream>();
outFile_->open(outputFilename_.c_str(), std::ios::out | std::ios::binary);
std::cout << "open fail errno = " << errno << " reason = " << strerror(errno) << std::endl;
// write(const char* ptr, uint)
(void)outFile_->write((const char*)outBuffer->GetBase(), size);
outFile_->flush();
// when done
outFile_->close();