96 votes

Comment obtenir le répertoire actuel?

Je l'ai fait en C # et Delphi, mais C ++ est mauvais. Le but est de créer un fichier dans le répertoire courant (où l'exécutable s'exécute).

Mon code:

 LPTSTR NPath = NULL;
DWORD a = GetCurrentDirectory(MAX_PATH,NPath);
HANDLE hNewFile = CreateFile(NPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
 

J'obtiens une exception à GetCurrentDirectory ().

Veuillez me dire pourquoi j'obtiens une exception et comment puis-je la faciliter en C ++?

49voto

avakar Points 20031

GetCurrentDirectory n'alloue pas d'espace pour le résultat, c'est à vous de le faire.

 TCHAR NPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, NPath);
 

Jetez également un œil à la bibliothèque Boost.Filesystem si vous souhaitez le faire de la manière C ++.

14voto

cdiggins Points 5549

À mon humble avis, voici quelques améliorations apportées à la réponse d' Anon .

 #include <windows.h>
#include <string>
#include <iostream>

std::string GetExeFileName()
{
  char buffer[MAX_PATH];
  GetModuleFileName( NULL, buffer, MAX_PATH );
  return std::string(buffer);
}

std::string GetExePath() 
{
  std::string f = GetExeFileName();
  return f.substr(0, f.find_last_of( "\\/" ));
}
 

4voto

yves Baumes Points 4521

Vous devez fournir un espace réservé de tampon valide. C'est:

 TCHAR s[100];
DWORD a = GetCurrentDirectory(100, s);
 

3voto

nickd Points 1683

GetCurrentDirectory () obtient le répertoire courant qui est l' endroit où l'exe est appelé à partir. Pour obtenir l'emplacement de l'exe, utilisez GetModuleFileName (NULL ...). si vous avez le handle vers l'exe, ou vous pouvez le dériver de GetCommandLine () si vous n'en avez pas.

Comme le souligne M. Butterworth, vous n'avez pas besoin d'une poignée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X