Forum: c++, strömmar som inte vill flyta rätt

Forum huvudsida -> Programmering -> c++, strömmar som inte vill flyta rätt

Sidor: 1

Till botten

mrKalkyl 01:58 - 31:a December 2008 | Post #1
Medlem
Inlägg: 2


Skicka PM
Hejsan, har stött på ett konstigt problem som jag hoppas att ni kan skina lite ljus på.

  1. ifstream *istream_ptr = new ifstream;
  2. istream_ptr->open(filename, ios_base::in);
  3. f(istream_ptr->is_open())
  4. {
  5. istream_ptr->seekg(0,ios::beg);
  6.  
  7. istream_ptr->read((char *) &nr_of_entrys, sizeof(int));
  8. r->clear();
  9. ....

Kodens uppgift här är att läsa in lite meta-data till programmet (som är en databas-hanterar-klass-sak) när det startar upp.

nr_of_entrys uppdateras vaje gång programmet avslutas.
Problemet är att när nr_of_entrys övergår 26 så vägrar ifstream att läsa och sätter badbit.
"This flag is set by standard input operations when an error that caused the loss of integrity of the stream happened."

,,r säker på att filen är rätt formaterad och fungerar, problemet ligger i läsningen.
Vad sjutton kan detta bero på, kanske ska man inte använda new med ifstream-objekt?




Slash 13:52 - 31:a December 2008 | Post #2
Medlem
Inlägg: 141


Skicka PM
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using std::ofstream;
  5. using std::ifstream;
  6. using std::cout;
  7.  
  8. int main()
  9. {
  10. int in_int = 0;
  11. int out_int = 27;
  12.  
  13. // Skriv
  14. ofstream out("test.dat", std::ios_base::binary);
  15. out.write((const char*)&out_int, sizeof(out_int));
  16. out.close();
  17.  
  18. // Läs
  19. ifstream in("test.dat", std::ios_base::binary);
  20. in.read((char*)&in_int, sizeof(in_int));
  21. in.close();
  22.  
  23. cout << "Skriv: " << out_int << ", läs: " << in_int << "\n";
  24. }


Ger för mig "Skriv: 27, läs: 27". Kan du om det är möjligt ge det minsta möjliga programmet där skrivning sen läsning inte fungerar?

-------------------------
Ingen sigantur!

Senast redigerad 13:53 - 31:a December 2008


mrKalkyl 15:35 - 31:a December 2008 | Post #3
Medlem
Inlägg: 2


Skicka PM
Dho, tack för svaret, men jag kom på felet. Hade glömt att meddela strömmen att det var en binär fil vi lekte med.
  1. istream_ptr->open(filename, ios_base::in | ios_base::binary);

Att det ens fungerade fram till 26 är för mig rätt mystiskt.




Sidor: 1

Forum huvudsida -> Programmering -> c++, strömmar som inte vill flyta rätt
Atom feed

Du får inte posta i den här tråden | Till toppen