Замените 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