Maison >développement back-end >C++ >Comment éviter les exceptions lors de l'obtention du répertoire actuel en C ?

Comment éviter les exceptions lors de l'obtention du répertoire actuel en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-10 21:55:02805parcourir

How to Avoid Exceptions When Getting the Current Directory in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn