Maison >développement back-end >C++ >Comment éviter les exceptions lors de l'obtention du répertoire actuel en C ?
Détermination du répertoire actuel
En C, obtenir le répertoire actuel dans lequel un exécutable est exécuté peut être crucial pour des tâches telles que la création de fichiers ou la gestion de ressources . Cependant, l'utilisation de GetCurrentDirectory() peut entraîner des exceptions, comme le montre l'exemple fourni.
Résoudre l'exception
Le problème se pose car GetCurrentDirectory() attend un tampon valide pour stocker le chemin du répertoire actuel. Dans le code fourni, NPath est initialement défini sur NULL. L'attribution d'un pointeur NULL à la fonction GetCurrentDirectory() provoque une exception.
Approches alternatives
Au lieu d'utiliser GetCurrentDirectory(), plusieurs autres méthodes peuvent être utilisées pour obtenir le répertoire actuel :
1. GetModuleFileName :
Pour récupérer le chemin de l'exécutable, qui inclut à la fois le répertoire et le nom du fichier, utilisez GetModuleFileName() :
TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH);
2. Extraire le chemin du répertoire du chemin exécutable :
Une fois le chemin de l'exécutable obtenu, vous pouvez extraire le chemin du répertoire en recherchant la dernière occurrence de "" ou "/" dans le chemin :
std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); std::wstring directoryPath = std::wstring(buffer).substr(0, pos);
Ceci fournit le chemin du répertoire sans le nom du fichier.
Exemple Fonction :
Voici un exemple de fonction qui renvoie le chemin du répertoire de l'exécutable :
#include <windows.h> #include <string> std::wstring ExePath() { TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH); std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); return std::wstring(buffer).substr(0, pos); }
Utilisation :
std::cout << "Current directory: " << ExePath() << std::endl;
En utilisant ces approches alternatives, vous pouvez obtenir efficacement le répertoire courant et éviter les exceptions liées à GetCurrentDirectory().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!