Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Existenz eines Ordners prüfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.06.2008, 10:33 Uhr
sia



Hallo zusammen,

Ich habe ein kleines Probl. und zwar ich möchte gerne prüfen ob der eingegebene Ordner existiert. z.B. C\temp
und hab bis jetzt

bool existens (char Oname)
{ ifstream (Oname);
if (Ordner)
return true;
else
return false;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.06.2008, 11:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,

wenn du das tempdir haben willst, unter win gibts da die funktion GetTempPath

Ansonsten prüfen ob ein Verzeichnis existiert musste so machen:


C++:
bool existDir(const char *dir)
{
   bool exist;
  char old[MAX_PATH]
  
  // Aktuelles Arbeitsverzeichnis prüfen
  GetCurrentDirectory(MAX_PATH, old);

  exist = (SetCurrentDirectory(dir) == TRUE);

  // Altes Arbeitsverzeichnis setzen
  SetCurrentDirectory(old);

  return exist;
}



unter linux halt chdir und getcwd benutzen

Und ums threadsafe zu machen eben nen mutex rum der die funktion nach außen hin "atomisiert".
--
class God : public ChuckNorris { };

Dieser Post wurde am 24.06.2008 um 11:18 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.06.2008, 13:33 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde an der Stelle auf Boost zurückgreifen. Da sähe das dann etwa so aus:

C++:
#include <boost/filesystem.hpp>
#include <string>

bool existDir(std::string const &dir) {
  namespace fs = boost::filesystem;

  return fs::exists(dir) && fs::is_directory(dir);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.06.2008, 13:47 Uhr
sia



Thx flosoft, das hat mir echt viel geholfen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.06.2008, 22:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oder man benutzt "stat"


C++:
bool existDir(const char *dir)
{
  struct stat s;
  if(stat(dir, &s) < 0)
    return false;
  return (s.st_mode & S_IFDIR);
}



unter VS ggf "_stat" statt "stat" (haha was für ein satz )
--
class God : public ChuckNorris { };

Dieser Post wurde am 24.06.2008 um 22:56 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.06.2008, 16:36 Uhr
0xdeadbeef
Gott
(Operator)


POSIX definiert ein Makro S_ISDIR, so dass

C++:
  return S_ISDIR(s);


geht. Macht im Zweifel das selbe, ist aber schicker. Man könnte natürlich auch gleich

C++:
bool existDir(char const *dir) {
  struct stat s;
  return stat(dir, &s) == 0 && S_ISDIR(s);
}


schreiben.

Ansonsten ist dieser Ansatz zwar insofern besser als der erste, als dass er threadsicher ist, aber die restlichen Probleme bleiben bestehen; zum Beispiel werden Zugriffsprobleme nicht von nicht vorhandenen Verzeichnissen unterschieden, und verwobene lange relative Pfade können fehlerhafte Ausgaben zur Folge haben (z.B. "../foo/../foo/../foo/../foo/../" usw.)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: