将二进制文件颠倒过来

时间:2018-06-17 09:24:32

标签: c++ file

考虑我的代码:

#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,但不幸的是没有发生任何事情。欢迎任何帮助。

0 个答案:

没有答案