Überprüfen, ob eine Datei existiert, ohne es zu öffnen
Wie kann ich überprüfen, ob eine Datei existiert in meinem Verzeichnis, bevor Sie fortfahren mit meinem Programm? Ich habe gelesen, Antworten, öffnen Sie die Datei mit verschiedenen Methoden, aber mein Problem ist, dass die meisten der Zeit, die Datei, die ich bin überprüfung für beschädigt und kann nicht geöffnet werden. Dies geschieht in der error-checking-Teil von meinem Programm und wird nur dann ausgelöst, wenn ein Fehler im obigen code aufgetreten ist. Ich möchte überprüfen, ob die Datei existiert, wenn ja dann bitten, es zu löschen, ansonsten einfach drucken Sie eine Nachricht.
Wie kann ich dies angehen?
(Nur löschen und akzeptieren Sie die Fehler funktionieren würde, aber ich bin dabei zu lernen, damit ich es richtig machen willst...)
Edit:
Habe ich heruntergeladen Boost verwenden des Dateisystem-Bibliothek und habe es kompiliert, scheinbar ohne Fehler, aber wenn ich versuche, um mein Programm zu kompilieren, bekomme ich diese Antwort:
g++ program.cpp -I <path to>/boost_1_54_0 -o output
Undefined symbols for architecture x86_64:
"boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)", referenced from:
boost::filesystem::exists(boost::filesystem::path const&)in cc1XX8rD.o
"boost::system::system_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in cc1XX8rD.o
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in cc1XX8rD.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Nur die Orte, die ich verwenden boost im Programm sind:
boost::filesystem::path my_file(s4);
if (boost::filesystem::exists(my_file)){ ...
- Kann Sie einfach nicht (versuchen zu) löschen Sie die Datei sowieso und tolerieren Fehler, ausgelöst durch die Löschung versuchen, falls es nicht vorhanden ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
stat()
oderaccess()
:Einer Datei, die existiert, aber enthält fehlerhafte Daten, die geöffnet werden können, ohne krank-Effekt. Solange Sie nicht versuchen, Lesen Sie den Inhalt der Datei.
Jedoch keine "überprüfen, ob es existiert" unterliegt TOCTUI und ist völlig unnötig, in den ersten Platz. Gerade versucht die Datei zu löschen und akzeptieren, dass der Löschvorgang kann nicht immer der bessere Ansatz.
Wenn durch Zufall, Sie sind mit Boost in Ihrem Projekt, Sie könnte gehen mit Boost.Dateisystem:
Diese Lösung ist portabel auf viele Systeme Boost.Dateisystem Implementierung.
dyld: Library not loaded: libboost_filesystem.dylib Referenced from: <path to compiled output> Reason: image not found Trace/BPT trap: 5
muss ich zusätzliche Argumente, wenn der code ausgeführt wird?g++ <code.cpp> -o output
)? Ich installierte das ganze viel mit homebrew, aber es scheint, dass ich noch kompilieren müssen, über diesen Verknüpfung OptionenMöchten Sie tun, ohne zu öffnen versuchen. Wenn Sie Ihre Meinung ändern und versuchen, die Datei zu öffnen:
Jemand sagt, dass dies automatisch schließen. Ich weiß es nicht.
Und, wenn Sie nicht wollen, um die Datei zu öffnen, ich denke, es gibt eine Vielzahl von Möglichkeiten. Ich kann Ihnen sagen, eine langsame, oldschool und hässliche Lösung, die vielleicht andere erklären Sie bessere Lösungen. Hier ist es:
Danach, Sie zu öffnen.abc-Datei und parse /interpreter die Zeilen. Sie haben zu öffnen.abc-Datei, aber Sie nicht haben, um die Datei zu öffnen, die Sie wollen, zu analysieren.
Diese Lösung wird sehr langsam (0.5 Sekunden, das ist nicht gut zum Beispiel mit den 100 Dateien), die Sie haben zu schreiben, eine Menge code, und diese werden sehr complecated zu analysieren /interpreter den Befehl "dir" die Antwort.
file_exists
Funktion, die Sie hat und dann habeif(file_exists(s4)==true){ //the file exists } else{ //it doesn't exist }
aber es scheint immer zu denken, dass die Datei nicht vorhanden ist, auch wenn es funktioniert. Habe ich etwas falsch gemacht?