Źle odczytana wartość pliku plik.foo
Ostatnio zmodyfikowano 2011-10-19 21:48
Trix Temat założony przez niniejszego użytkownika |
Źle odczytana wartość pliku plik.foo » 2011-10-18 19:03:21 Kod: #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? |
|
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. |
|
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 :) |
|
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.
Obsługa plików |
|
pekfos |
» 2011-10-19 20:30:04 zniszcz obiekt (i/o)fstream. |
|
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 :> |
|
« 1 » |