C++ Aprire un file


Esempio

L'apertura di un file viene eseguita allo stesso modo per tutti e 3 i flussi di file ( ifstream , ofstream e fstream ).

Puoi aprire il file direttamente nel costruttore:

std::ifstream ifs("foo.txt");  // ifstream: Opens file "foo.txt" for reading only.

std::ofstream ofs("foo.txt");  // ofstream: Opens file "foo.txt" for writing only.

std::fstream iofs("foo.txt");  // fstream:  Opens file "foo.txt" for reading and writing.

In alternativa, è possibile utilizzare la funzione membro open() del flusso di file open() :

std::ifstream ifs;
ifs.open("bar.txt");           // ifstream: Opens file "bar.txt" for reading only.

std::ofstream ofs;
ofs.open("bar.txt");           // ofstream: Opens file "bar.txt" for writing only.

std::fstream iofs;
iofs.open("bar.txt");          // fstream:  Opens file "bar.txt" for reading and writing.

Si dovrebbe sempre verificare se un file è stato aperto correttamente (anche durante la scrittura). Gli errori possono includere: il file non esiste, il file non ha i diritti di accesso corretti, il file è già in uso, si sono verificati errori del disco, unità disconnessa ... Il controllo può essere eseguito come segue:

// Try to read the file 'foo.txt'.
std::ifstream ifs("fooo.txt");  // Note the typo; the file can't be opened.

// Check if the file has been opened successfully.
if (!ifs.is_open()) {
    // The file hasn't been opened; take appropriate actions here.
    throw CustomException(ifs, "File could not be opened");
}

Quando il percorso del file contiene barre retroverse (ad esempio, su sistema Windows) dovresti eseguire correttamente l'escape:

// Open the file 'c:\folder\foo.txt' on Windows.
std::ifstream ifs("c:\\folder\\foo.txt"); // using escaped backslashes
C ++ 11

o usa letterale crudo:

// Open the file 'c:\folder\foo.txt' on Windows.
std::ifstream ifs(R"(c:\folder\foo.txt)"); // using raw literal

o usare invece le barre in avanti:

// Open the file 'c:\folder\foo.txt' on Windows.
std::ifstream ifs("c:/folder/foo.txt");
C ++ 11

Se si desidera aprire il file con caratteri non ASCII nel percorso su Windows al momento, è possibile utilizzare un argomento del percorso dei caratteri ampio non standard :

// Open the file 'пример\foo.txt' on Windows.
std::ifstream ifs(LR"(пример\foo.txt)"); // using wide characters with raw literal