En fait, écrire des fichiers de la fin au début est une solution inefficace, car vous perdez du temps sur la pré-affectation et la recherche de fichiers. Il est préférable d'écrire le tableau de la fin au début du fichier.
Je ne sais pas exactement comment est écrit votre programme, donc ma réponse pourrait ne pas être aussi précise que vous le souhaitez, mais je suppose que cela pourrait être fait quelque chose comme ça :
#include <iostream>
#include <vector>
#include <ostream>
#include <fstream>
// Variant 1
void writeMyData(const std::vector<int>& data, std::ofstream& stream)
{
for (auto it = data.rbegin(); it != data.rend(); it++)
stream.write((const char*)&*it, sizeof(int));
}
// Variant 2
void writeMyData2(const int* data, int length, std::ofstream& stream)
{
for (int i = length - 1; i >= 0; i--)
stream.write((const char*)(data + i), sizeof(int));
}
int main()
{
std::vector<int> yourBuffer = {5, 4, 3, 2, 1};
std::ofstream file;
file.open ("data.bin", std::ios::binary);
// Write: 1, 2, 3, 4, 5
// Variant 1
writeMyData(yourBuffer, file);
// Variant 2
//writeMyData2(yourBuffer.data(), yourBuffer.size(), file);
file.close();
return 0;
}
Ainsi, vous pouvez utiliser des itérateurs inversés ( rbegin
, rend
au lieu de begin
, end
) ou simplement itérer la boucle dans l'ordre inverse.
Mise à jour : Ou vous pouvez inverser vos données dans la RAM en place, et ensuite écrire toutes les données en une seule fois. C'est probablement la méthode la plus efficace.
std::reverse(std::begin(yourBuffer), std::end(yourBuffer));
stream.write((const char*)yourBuffer.data(), sizeof(int) * yourBuffer.size());
Soyez attentif aux sizeof(int)
- vous avez probablement char
ou d'un autre type.