/ / fstream nie tworzy nowego pliku - c ++, file-io, fstream

fstream nie tworzy nowego pliku - c ++, file-io, fstream

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 № 1

Kilka 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.