考虑我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <stdexcept>
using namespace std;
void IzvrniDatoteku(string ime)
{
ifstream ulazni_tok(ime, ios::binary);
if(!ulazni_tok) throw logic_error("Datoteka ne postoji");
ofstream izlazni_tok(ime, ios::binary);
izlazni_tok.seekp(0, ios::end);
ulazni_tok.seekg(0, ios::beg);
int kolicina(izlazni_tok.tellp()-ulazni_tok.tellg());
int broj_brojeva(kolicina/sizeof(double));
for(int i=0; i<broj_brojeva/2; i++)
{
izlazni_tok.seekp(broj_brojeva*sizeof(double)-i*(sizeof(double))-sizeof(double));
ulazni_tok.seekg(i*sizeof(double));
if(!ulazni_tok) ulazni_tok.clear();
double temp1;
double temp2;
ulazni_tok.read((char*)&temp1, sizeof(temp1));
ulazni_tok.seekg(broj_brojeva*sizeof(double)-i*(sizeof(double))-sizeof(double));
ulazni_tok.read((char*)&temp2, sizeof(temp2));
if(!ulazni_tok) ulazni_tok.clear();
izlazni_tok.write((char*)&temp1, sizeof(temp1));
izlazni_tok.seekp(i*sizeof(double));
izlazni_tok.write((char*)&temp2, sizeof(temp2));
izlazni_tok.flush();
}
}
int main ()
{
ofstream izlaz("Test.dat", ios::binary);
double a(1), b(2), c(3);
izlaz.write((char*)&a, sizeof(a));
izlaz.write((char*)&b, sizeof(b));
izlaz.write((char*)&c, sizeof(c));
izlaz.flush();
ifstream ulaz("Test.dat", ios::binary);
double pom;
while(ulaz.read((char*)&pom, sizeof(pom)))
cout<<pom<<endl;
ulaz.clear();
IzvrniDatoteku("Test.dat");
ulaz.clear();
ulaz.seekg(0, ios::beg);
while(ulaz.read((char*)&pom, sizeof(pom)))
cout<<pom<<endl;
return 0;
}
在这个程序中,我尝试创建一个可以将我的二进制文件颠倒过来的函数。我的二进制文件由数字1,2和3组成。我预计在使用我的函数后,输出将是3,2和1,但不幸的是没有发生任何事情。欢迎任何帮助。