Das einzige Problem, das ich mit diesem Code habe, ist der Kommentar im anderen Fall. Nur weil etwas kein Verzeichnis ist, heißt das nicht, dass es eine Datei ist.
– dicroce
28. September 2008 um 23:27 Uhr
@dicroce: Ja, wahr genug; Fest.
– Mike F
29. September 2008 um 0:54 Uhr
Wenn ich versuche, dies zu verwenden, bekomme ich “Aggregate ‘main(int, char**)::stat s’ hat einen unvollständigen Typ und kann nicht definiert werden” und konnte wirklich nicht herausfinden, was der Fehler ist. Es gibt zuerst einen Fehler in der Zeile von struct stat s aus; Was könnte mein Fehler sein?
– meakgoz
30. März 2015 um 13:40 Uhr
Okay, ich musste #include hinzufügen, mein Fehler 🙂
– meakgoz
30. März 2015 um 13:54 Uhr
Gibt es eine Überladung oder eine ähnliche Funktion, die einen breiten Zeichenpfad unterstützt?
– mbaros
31. Juli 2016 um 19:25 Uhr
Anruf GetFileAttributesund suchen Sie nach dem Attribut FILE_ATTRIBUTE_DIRECTORY.
Wenn Sie Windows 98 unterstützen müssen, können Sie diese Funktion nicht verwenden. Siehe meine Antwort zu PathIsDirectory unten, wenn Sie Win98-Unterstützung benötigen.
#include <filesystem> // C++17
#include <iostream>
namespace fs = std::filesystem;
int main()
{
const std::string pathString = "/my/path";
const fs::path path(pathString); // Constructing the path from a string is possible.
std::error_code ec; // For using the non-throwing overloads of functions below.
if (fs::is_directory(path, ec))
{
// Process a directory.
}
if (ec) // Optional handling of possible errors.
{
std::cerr << "Error in is_directory: " << ec.message();
}
if (fs::is_regular_file(path, ec))
{
// Process a regular file.
}
if (ec) // Optional handling of possible errors. Usage of the same ec object works since fs functions are calling ec.clear() if no errors occur.
{
std::cerr << "Error in is_regular_file: " << ec.message();
}
}
Hallo @Roi Danton, danke für deine Antwort. Weißt du, warum das unter macOS nicht funktioniert? Es scheint, dass es damit zusammenhängt, dass Clang diese Bibliothek nicht unterstützt. Sehr schade, IMO.
– mannyglover
13. November 2018 um 16:15 Uhr
@mannyglover Clang unterstützt std::filesystem. Stellen Sie sicher, dass Sie Clang 7 oder höher mit Option verwenden -std=c++17. Minimales Beispiel im Compiler Explorer.
– Roi Danton
13. November 2018 um 19:01 Uhr
jeffm
In Win32 verwende ich normalerweise PfadIstVerzeichnis und seine Schwesterfunktionen. Dies funktioniert in Windows 98, was GetFileAttributes nicht tut (laut MSDN-Dokumentation).
Dies ist eine einfache Methode mit der GetFileAttributesW Funktion, um zu überprüfen, ob der Pfad ein Verzeichnis unter Windows ist. Wenn der empfangene Pfad ein Verzeichnis- oder Dateipfad sein muss, dann können Sie davon ausgehen, dass es sich um einen Dateipfad handelt, wenn es sich nicht um einen Verzeichnispfad handelt.