Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Źle odczytana wartość pliku plik.foo

Ostatnio zmodyfikowano 2011-10-19 21:48
Autor Wiadomość
Trix
Temat założony przez niniejszego użytkownika
Źle odczytana wartość pliku plik.foo
» 2011-10-18 19:03:21
Kod:
C/C++
#include <iostream>
#include <fstream>

#include <conio.h>

using namespace std;
#pragma pack(push, 1)
struct File
{
    int number1;
    float number2;
};
#pragma pack(pop)
int main()
{
    ofstream ofs( "plik.foo", ios::binary );
   
    File * file = new File;
    cin >> file->number1;
    ofs.write(( char * )( file ), sizeof( File ) );
    delete file;
   
    ifstream ifs( "plik.foo", ios::binary );
   
    char * temp = new char[ sizeof( File ) ];
    ifs.read( temp, sizeof( File ) );
    File * files =( File * )( temp );
   
    cout << "Liczba znajdujaca sie w pliku plik.foo: " << files->number1 << " " << endl;
    getch();
    delete files;
   
}

A oto wynik programu:

9
Liczba znajdujaca sie w pliku plik.foo: -842150451


Bez znaczenia jaką podam liczbę zawsze wynik będzie taki sam.

Coś źle zrobiłem?

edit:
Po próbach spróbowałem usunąć linijki odp. za zapisywanie wyniku, wynik wyświetlony w konsoli był prawidłowy.
Ale dlaczego powyższy kod źle działa?

P-42290
DejaVu
» 2011-10-18 22:14:05
Bo chcesz odczytać plik do którego wcześniej pisałeś i co więcej nie zamknąłeś go. Wynik jest zły ponieważ nie udało się otworzyć pliku do odczytu.
P-42303
Trix
Temat założony przez niniejszego użytkownika
» 2011-10-19 20:24:06
Ale to jak zamknąć?
Myślałem, że funkcja delete za mnie wszystko załatwi :)
P-42333
DejaVu
» 2011-10-19 20:29:44
Chciałbym zauważyć, że kasujesz strukturę, a nie plik. Czy Ty aby na pewno rozumiesz co piszesz...? Poczytaj rozdział o obsłudze plików - co prawda jest długi ale znajdziesz tam sensowne informacje co do czego służy.

» Kurs C++Obsługa plików lekcja
P-42335
pekfos
» 2011-10-19 20:30:04
zniszcz obiekt (i/o)fstream.
P-42336
Trix
Temat założony przez niniejszego użytkownika
» 2011-10-19 21:48:53
@DejaVu
Czasem zdarza się, że nie wiem co dana linijka oznacza, a ja bazuję non stop na kursach :)

Jeśli chodzi o ten temat to już wszystko wiem :>
P-42340
« 1 »
  Strona 1 z 1