const boost::filesystem::path fileName("/tmp/hello.log");
if (boost::filesystem::exists(fileName))
{
// do sth
}
else
{
std::cout << "file doesn't exist: " << std::endl;
}
ist die Frage, die ich habe: (d. H /tmp/hello.log)Warum `boost :: filesystem :: exists` gibt false zurück, wenn eine Datei existiert? Hier
Bevor ich die Log-Datei verarbeiten kann, muss ich überprüfen, ob die Datei abgeschlossen ist. Wenn die Datei nicht vollständig ist, werde ich die Datei später überprüfen. erste unvollständig ist
Die Log-Datei (dh ohne END als letzte Zeile)
$echo "END" >> /tmp/hello.log
Meine Anwendung läuft:
Simulation ausführen zu können, wähle ich die folgenden Methoden:
Fall I wie erwartet. Mit anderen Worten, meine Anwendung wird es erneut versuchen, wenn die Datei unvollständig ist und später die vollständige Protokolldatei erfolgreich verarbeitet.
Fall II:
Die Protokolldatei zunächst unvollständig ist (dh ohne Ende als letzte Zeile) I verwenden vi
manuell eine Zeile am Ende einzufügen, während die Anwendung zur gleichen Zeit hält die folgenden Zeilen überprüft :
const boost::filesystem::path fileName("/tmp/hello.log");
if (boost::filesystem::exists(fileName))
{
// do sth
}
else
{
std::cout << "file doesn't exist: " << std::endl;
}
Nachdem ich die letzte Zeile an die Datei angehängt habe, meldet meine Anwendung Fehler und sagt "Datei existiert nicht". Aber in der Tat ist die Protokolldatei da.
Warum in Fall II die Boost-Funktion falsch zurückgibt, während in Fall I die Funktion wahr zurückgibt.
Zunächst, wenn Sie die Datei in VI bearbeiten, öffnen * Sie * die Datei '/ tmp/hello.log'? Nicht nur z.B. 'vi hello.log' in einem anderen Pfad? Zweitens prüft der angezeigte Code nicht, ob die Datei "unvollständig" ist oder nicht, nur wenn sie existiert. Sogar eine "unvollständige" Datei existiert. –
Ich würde raten vi erstellt eine Sicherungskopie, d. H. Zuerst 'Hallo.log' wird umbenannt in' Hallo.log ~ '(oder ähnlich), dann wird' Hallo.log' mit dem neuen Inhalt geschrieben. Zwischen diesen beiden Ereignissen findet Ihr Programm die Datei nicht. –
1> Ich öffne die Datei /tmp/hello.log manuell mit 'vi/tmp/hello.log' 2> Ich habe den Code für die Überprüfung nicht vollständig angezeigt, weil ich nur die Vollständigkeit überprüfe, nachdem ich die Datei gefunden habe. – q0987