Замените QByteArray на стандартные функции C++

Я пишу простой двоичный файл, который должен содержать содержимое другого двоичного файла и имя строки этого (другого) файла в конце. Я нашел этот пример кода, который использует QByteArray из библиотеки Qt. Мой вопрос: возможно ли сделать то же самое с функциями std C++?

char buf;
QFile sourceFile( "c:/input.ofp" );
QFileInfo fileInfo(sourceFile);
QByteArray fileByteArray;

// Fill the QByteArray with the binary data of the file
fileByteArray = sourceFile.readAll();

sourceFile.close();

std::ofstream fout;
fout.open( "c:/test.bin", std::ios::binary );

// fill the output file with the binary data of the input file
for (int i = 0; i < fileByteArray.size(); i++) {
     buf = fileByteArray.at(i);
     fout.write(&buf, 1);
}

// Fill the file name QByteArray 
QByteArray fileNameArray = fileInfo.fileName().toLatin1();


// fill the end of the output binary file with the input file name characters
for ( int i = 0; i < fileInfo.fileName().size();i++ ) {
    buf = fileNameArray.at(i);
    fout.write( &buf, 1 );
}

fout.close();

2 ответа

Откройте ваши файлы в двоичном режиме и скопируйте в "один выстрел" через rdbuf:

std::string inputFile = "c:/input.ofp";
std::ifstream source(input, std::ios::binary);
std::ofstream dest("c:/test.bin", std::ios::binary);

dest << source.rdbuf();

Затем напишите имя файла в конце:

dest.write(input.c_str(), input.length()); 

Вы можете найти больше способов здесь.

Да, обратитесь к fstream / ofstream. Вы можете сделать это так:

std::string text = "abcde"; // your text
std::ofstream ofstr; // stream object
ofstr.open("Test.txt"); // open your file
ofstr << text; // or: ofstr << "abcde"; // append text
Другие вопросы по тегам