2013-08-22 4 views
-2
int main() 
{ 
ofstream outCredit("credit.txt" , ios::out | ios::binary) ; 

if(!outCredit) 
{ 
    cerr << "File could not open file " << endl ; 
    exit(1) ; 
} 

ClientData blankClient ; 

for(int i = 0 ; i < 100 ; ++i) 
    outCredit.write(reinterpret_cast< const char* >(&blankClient), sizeof(ClientData)) ; 
} 

Я объявил класс ClientData с членами, а именно int account , char firstName[15] , char lastName[10] , double account? Когда файл будет создан, который должен содержать 100 пустых записей, я получаю что-то вроде этого во всем файле 100 раз, что здесь не так?Странные выходы в файле

enter image description here

+0

Что вы ожидаете от значения 'a', если я объявляю просто' int a? '? мусор правый? То же самое происходит с неинициализированным 'blankClient' – P0W

ответ

1

Вы не можете выписывать структуры и классы на этом пути. Вы должны индивидуально писать/передавать каждый элемент, который вы хотите в файле.

+0

Я хочу создать файл с произвольным доступом, чтобы добавить новую учетную запись, не нарушая старую, и я выделяю необходимое количество байтов для каждой записи. – AbKDs

+0

@digi_abhshk Структуры и классы могут содержать отступы между членами, что, вероятно, является причиной того, что вы видите случайные символы. Также макет в памяти зависит от компилятора, поэтому файл, написанный с кодом, скомпилированным одним компилятором, может быть несовместимым с кодом, скомпилированным другим компилятором. –

+0

@digi_abhshk Вы все равно можете это сделать, когда вы выводите каждого участника самостоятельно. –

0

Вот простая примерная программа, которая записывает объект в файл и читает то же самое.

//Objfile.h 
#include<iostream> 
#include<fstream> 
#include<string.h> 
#define STRLEN 10 
class A 
{ 
    public: 
    int a; 
    float c; 
    char *f; 
    A():a(10),c(30.5){ 
     f=new char[STRLEN]; 
     memset(f, '\0', STRLEN); 
     strcpy(f,"fed"); 
     std::cout<<"\n A"; 
    } 
    ~A() { delete[] f; } 
    void print() { std::cout<<" a:"<<a<<" g:"<<g<<" f:"<<f; } 

}; 

//ObjFile.cpp // Writes Object to the file 
#include<objfile.h> 
main() 
{ 
    std::ofstream out("obj.txt", std::ios::out|std::ios::binary); 
    if (!out) { 
     std::cout<<"\n Error in opening output file out.txt"; 
     return 0; 
    } 
    A a; 
    out.write((char*)&a, sizeof(a)); 
    out.close(); 
    } 

    //ObjfileRead.cpp //Reads record (Object) from the file and prints 
    #include<objfile.h> 
    main() 
    { 
    std::ifstream in("obj.txt", std::ios::in|std::ios::binary); 
    if (!in) { 
     std::cout<<"in file can't open \" obj.txt \" "; 
     return 0; 
    } 
    A *b; 
    char *temp_obj=new char[sizeof(A)]; 
    in.read(temp_obj,sizeof(A)); 
    b=reinterpret_cast<A*>(temp_obj); 
    b->print(); 
    in.close(); 
    return 0; 
} 
Смежные вопросы