2 Stimmen

Einstellen des aktuellen Verzeichnisses einer laufenden Anwendung in C++

Die folgenden Antwort eine Lösung in C# anbietet, frage ich mich, was das Äquivalent wäre, wenn man nur C++ verwenden würde (nicht C++ \cli )

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

Gibt es irgendetwas im Boost, das helfen könnte?

Aufgrund dieses Problems, das ich habe: Korrektes Erstellen und Ausführen eines Win32-Dienstes mit Datei-E/A

8voto

eq- Punkte 9866

SetCurrentDirectory (in Win32):

http://msdn.microsoft.com/en-us/library/Windows/desktop/aa365530%28v=vs.85%29.aspx

current_path en boost::filesystem :

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#current_path

Die Entsprechung für BaseDirectory könnte lauten GetModuleFileName (mit einem Null-Handle für das erste Argument), gefolgt von GetFullPathName um das Verzeichnis aus dem Pfad der ausführbaren Datei zu erhalten.

4voto

perilbrain Punkte 7722

Utilice SetCurrentDirectory WINAPI.

Eine weitere Antwort finden Sie unter Was ist der Unterschied zwischen _chdir und SetCurrentDirectory in Windows?

Vielleicht gibt es auch einen Bedarf für Modulnamen (scheint aus den Kommentaren), hier ist einer aus meinem alten Laden:-

int main()
{
  char path[MAX_PATH]={0};
  GetModuleFileName(0,path,MAX_PATH);
}

4voto

Drew Dormann Punkte 54591

Unter Windows ist die vollständige Entsprechung von

System.IO.Directory.SetCurrentDirectory ( System.AppDomain.CurrentDomain.BaseDirectory )` 

wäre:

// Get full executable path
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);

// Get executable directory
boost::filesystem::path path(buffer);
path = path.parent_path();

// Set current path to that directory
boost::filesystem::current_path( path );

Beachten Sie, dass es keine plattformunabhängige Möglichkeit gibt, das Verzeichnis einer Anwendung zu ermitteln, da C++ das Konzept der Verzeichnisse im Standard nicht kennt. Auch Boost scheint keine entsprechende Funktion zu haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X