#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();