}
if (fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+ if (types & NO_DOT_OR_DOTDOT) {
+ if (!strcmp(fData.cFileName,".") || !strcmp(fData.cFileName,"..")) {
+ continue;
+ }
+ }
+
if (!(types & TYPE_DIR)) {
continue;
}
return result;
}
+bool Dir::exists() const
+{
+#ifdef _WIN32
+ struct _stat buf ;
+
+ if (_stat (_path.c_str(), &buf ) < 0) {
+ return false;
+ }
+
+ return ((S_IFDIR & buf.st_mode ) !=0);
+#else
+ struct stat buf ;
+
+ if (stat(_path.c_str(), &buf ) < 0) {
+ return false ;
+ }
+
+ return ((S_ISDIR(buf.st_mode )) != 0);
+#endif
+}
+
SGPath Dir::file(const std::string& name) const
{
SGPath childPath = _path;
PathList children(int types = 0, const std::string& nameGlob = "") const;
SGPath file(const std::string& name) const;
+
+ /**
+ * Check that the directory at the path exists (and is a directory!)
+ */
+ bool exists() const;
private:
mutable SGPath _path;
};
#include <simgear/debug/logstream.hxx>
#include <stdio.h>
#include <sys/stat.h>
-#include <sys/stat.h>
#ifdef _WIN32
# include <direct.h>
#endif
#endif
-// If Unix, replace all ":" with "/". If MacOS, replace all "/" with
-// ":" it should go without saying that neither of these characters
-// should be used in file or directory names. In windoze, allow the
+// If Unix, replace all ":" with "/". In windoze, allow the
// second character to be a ":" for things like c:\foo\bar
void
}
}
-bool SGPath::exists() const {
- FILE* fp = fopen( path.c_str(), "r");
- if (fp == 0) {
- return false;
- }
- fclose(fp);
- return true;
+bool SGPath::exists() const
+{
+#ifdef _WIN32
+ struct _stat buf;
+
+ if (_stat(path.c_str(), &buf) < 0) {
+ return false;
+ }
+
+ return true;
+#else
+ struct stat buf ;
+
+ if (stat(path.c_str(), &buf) < 0) {
+ return false ;
+ }
+
+ return true;
+#endif
}
#ifdef _WIN32