2012-01-12 19 views
27

Próbuję użyć std :: fstream na IO do pliku, a chcę, aby utworzyć plik, jeśli nie istnieje.std :: fstream nie tworzy plik

std::fstream my_stream 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
    if(!my_stream) 
     std::cout<<"error"<<strerror(errorno); 

uzyskać ten wynik: "Nie ma takiego pliku lub katalogu"

Jak utworzyć plik w tym przypadku?

Odpowiedz

38

Ty określając std::fstream::in w wywołaniu fstream::open(). To jest known, aby wymusić wymagany plik.

Albo usuń std::fstream::in z argumentu mode, albo określ std::fstream::trunc oprócz innych flag.

+20

Zauważając, że 'trunc' tworzy za każdym razem pusty plik. –

10

To trochę brudny, ale działa. Nie zastępuje pliku, jeśli istnieje, ale tworzy nowy, jeśli pierwsze uruchomienie nie powiedzie się.

std::fstream my_stream 
my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 

if(!my_stream) 
{ 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::trunc | std::fstream::out);  
    my_stream.close(); 
    // re-open with original flags 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
} 
else 
{ 
    // read something 
} 

// read/write here 
+0

Możesz usunąć to drugie zamknięcie(). Po prostu otwarcie go z flagami "binary | in | out | trunc" będzie działało dobrze. – TorbenC

+0

Bardzo późno na to, ale nie mógł my_stream.open ("my_file_name" std :: fstream :: binary | std :: fstream :: trunc | std :: fstream :: out); prostu być my_stream.open ("my_file_name" std :: ios :: out); ? Ma na celu chwilowe utworzenie pliku ... – user2962533

Powiązane problemy