Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-10 21:55:02
original
754 Les gens l'ont consulté

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);
Copier après la connexion

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);
Copier après la connexion

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);
}
Copier après la connexion

Utilisation :

std::cout << "Current directory: " << ExePath() << std::endl;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal