Próbuję nauczyć się dynamicznego dostępu do plików. Mój kod jest następujący:
int main()
{
dtbrec xrec; // class object
fstream flh;
// Doesn"t create a new file unless ios::trunc is also given.
flh.open("database.txt", ios::in | ios::out | ios::binary);
flh.seekp(0,ios::end);
xrec.getdata();
flh.write((char*)&xrec, sizeof(dtbrec));
flh.close();
}
Myślałem, że fstream
domyślnie tworzy nowy plik "database.txt", jeśli nie istnieje. Wszelkie pomysły dotyczące tego, co może być nie tak?
Odpowiedzi:
9 dla odpowiedzi № 1Kilka wskazówek na temat fstream:
za. Jeśli używasz ukośnika, aby określić katalog, na przykład podczas używania fstream f;
f.open ("folderfile", ios :: out);
nie będzie działać, back slash musi być poprzedzony ukośnikiem odwrotnym, więc poprawny sposób będzie:
f.open ("folder \ file", ios :: out);
b. Jeśli chcesz utworzyć nowy plik, to nie działa:
f.open ("file.txt", ios :: in | ios :: out | ios :: binary);
prawidłowym sposobem byłoby najpierw utworzyć plik, używając ios :: out lub ios :: trunc
f.open ("file.txt". ios :: out) lub f.open ("file.txt", ios :: trunc);
i wtedy
f.open ("file.txt", ios :: in | ios :: out | ios :: binary);
do. Wreszcie może być w tej kolejności, jak określono w tej odpowiedzi, fstream nie tworzy pliku
Zasadniczo ios :: in wymaga już istniejącego pliku.
1 dla odpowiedzi nr 2
Spróbuj użyć ofstream
, automatycznie tworzy plik, jeśli jeszcze nie istnieje. Lub, jeśli chcesz wykonać zarówno dane wejściowe, jak i dane wyjściowe w strumieniu, spróbuj użyć fstream
, ale nie musisz określać ios::in|ios::out|ios::binary
, bo fstream
automatycznie ustawia to za ciebie.