2016-11-18 3 views
3

Ich verwende das folgende Stück Code, um zu überprüfen, ob die Datei existiert oder nicht mit std::ifstream.Std :: Ifstream Initialisierung mit Dateiname

#include <iostream> 
#include <fstream> 

int main() 
{ 
    if (std::ifstream("file.txt")) 
    { 
     std::cout << "File present\n"; 
    } 

    return 0; 
} 

Da ich kein Objekt für std::ifstream verwenden, wie schließe ich die Datei? Oder ist es nicht erforderlich, zu schließen?

+1

Die Datei wird automatisch geschlossen verwenden können (Sie werden mit einem * temporären * Objekt). – Leon

+0

Unverwandter Kommentar, aber verlassen Sie sich nicht auf etwas Wichtiges. Um sicherzugehen, dass es sich um eine Datei handelt, öffnen Sie sie und halten Sie sie am Griff fest. Weil sonst könnte ein anderes Programm die Datei entfernen, nachdem Sie es überprüft haben. https://en.wikipedia.org/wiki/Time_of_check_to_time_of_use –

Antwort

2

Tatsächlich verwenden Sie unbenannte temporäre Objekt von std::ifstream. Es ist nicht erforderlich, std::ifstream::close() aufzurufen, da das Objekt nach der Verwendung zerstört wird und der Destruktor die Datei korrekt schließt.

Um genauer zu sein:

// Temporary object is not yet created here 
if (std::ifstream("file.txt")) 
{ 
    // Temporary object is already destroyed here 
    std::cout << "File present\n"; 
} 
// Or here 

Von documentation:

(destructor) [virtuellen] (implizit deklariert)

die basic_ifstream und den zugehörigen Puffer selbst zerstört, die Datei schließt

1

Es ist ein temporäres Objekt, sodass Sie es nicht schließen müssen, da es automatisch geschlossen wird, wenn Sie es nicht mehr verwenden. Wenn Sie wollen sicherstellen, dass Sie immer std::ifstream::is_open Here ist eine Liste von Funktionen in ifstream

Verwandte Themen