GetFullPathNameA, fonction (fileapi.h)

Récupère le chemin d’accès complet et le nom du fichier .wim spécifié.

Pour effectuer cette opération en tant qu’opération transactionnelle, utilisez la fonction GetFullPathNameTransacted .

Pour plus d’informations sur les noms de fichiers et de chemins d’accès, consultez Noms de fichiers , chemins et espaces de noms.

Note Pour plus d’informations sur l’utilisation de chemins relatifs avec la fonction GetFullPathName dans des applications multithread ou du code de bibliothèque partagée, consultez la section Remarques.

Syntaxe

DWORD GetFullPathNameA(
  [in]  LPCSTR lpFileName,
  [in]  DWORD  nBufferLength,
  [out] LPSTR  lpBuffer,
  [out] LPSTR  *lpFilePart
);

Paramètres

[in] lpFileName

Nom du fichier.

Ce paramètre peut être un nom de fichier court (le formulaire 8.3) ou long. Cette chaîne peut également être un nom de partage ou de volume.

[in] nBufferLength

Taille de la mémoire tampon pour recevoir la chaîne terminée par null pour le lecteur et le chemin d’accès, dans les TCHAR.

[out] lpBuffer

Pointeur vers une mémoire tampon qui reçoit la chaîne terminée par null pour le lecteur et le chemin d’accès.

[out] lpFilePart

Pointeur vers une mémoire tampon qui reçoit l’adresse (dans lpBuffer) du composant de nom de fichier final dans le chemin d’accès.

Ce paramètre peut être NULL.

Si lpBuffer fait référence à un répertoire et non à un fichier, lpFilePart reçoit zéro.

Valeur retournée

Si la fonction réussit, la valeur de retour est la longueur, en TCHAR, de la chaîne copiée dans lpBuffer, sans inclure le caractère null de fin.

Si la mémoire tampon lpBuffer est trop petite pour contenir le chemin, la valeur de retour correspond à la taille, en TCHAR, de la mémoire tampon requise pour contenir le chemin et le caractère null de fin.

Si la fonction échoue pour une autre raison, la valeur de retour est zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

GetFullPathName fusionne le nom du lecteur et du répertoire actuels avec un nom de fichier spécifié pour déterminer le chemin d’accès complet et le nom de fichier d’un fichier spécifié. Il calcule également l’adresse de la partie du nom de fichier du chemin d’accès complet et du nom de fichier.

Cette fonction ne vérifie pas que le chemin d’accès et le nom de fichier résultants sont valides ou qu’ils voient un fichier existant sur le volume associé.

Notez que le paramètre lpFilePart ne nécessite pas d’espace de mémoire tampon de chaîne, mais uniquement suffisant pour une seule adresse. En effet, il retourne simplement une adresse dans la mémoire tampon qui existe déjà pour lpBuffer.

Les noms de partage et de volume sont des entrées valides pour lpFileName. Par exemple, la liste suivante identité le chemin d’accès et les noms de fichiers retournés si test-2 est un ordinateur distant et U : est un lecteur mappé réseau dont le répertoire actuel est la racine du volume :

  • Si vous spécifiez « \\test-2\q$\lh », le chemin d’accès retourné est « \\test-2\q$\lh »
  • Si vous spécifiez « \\ ?\UNC\test-2\q$\lh », le chemin d’accès retourné est « \\ ?\UNC\test-2\q$\lh »
  • Si vous spécifiez « U : », le chemin d’accès retourné est le répertoire actif sur le lecteur « U :\ »
GetFullPathName ne convertit pas le nom de fichier spécifié, lpFileName. Si le nom de fichier spécifié existe, vous pouvez utiliser GetLongPathName ou GetShortPathName pour convertir respectivement en noms de chemin d’accès long ou court.

Si la valeur de retour est supérieure ou égale à la valeur spécifiée dans nBufferLength, vous pouvez appeler à nouveau la fonction avec une mémoire tampon suffisamment grande pour contenir le chemin. Pour obtenir un exemple de ce cas en plus de l’utilisation d’une mémoire tampon de longueur nulle pour l’allocation dynamique, consultez la section Exemple de code.

Note Bien que la valeur de retour dans ce cas soit une longueur qui inclut le caractère null de fin, la valeur de retour en cas de réussite n’inclut pas le caractère null de fin dans le nombre.

Les chemins d’accès relatifs passés à la fonction GetFullPathName sont interprétés comme relatifs au répertoire actif du processus. L’état du répertoire actuel écrit par la fonction SetCurrentDirectory est global au processus et peut être modifié par n’importe quel thread à tout moment. Les applications doivent savoir que les appels consécutifs à la fonction GetFullPathName avec un chemin relatif peuvent produire des résultats différents si le répertoire actif change entre les deux appels.

Pour éviter les problèmes causés par des résultats incohérents, les applications multithread et le code de bibliothèque partagée doivent éviter d’utiliser des chemins d’accès relatifs. Si un chemin d’accès relatif est reçu, il doit être consommé une seule fois, soit en passant le chemin d’accès relatif directement à une fonction comme CreateFile, soit en le convertissant en chemin absolu et en utilisant le chemin absolu à partir de ce point.

Dans Windows 8 et Windows Server 2012, cette fonction est prise en charge par les technologies suivantes.

Technologie Prise en charge
Protocole Server Message Block (SMB) 3.0 Oui
Basculement transparent SMB 3.0 (TFO) Oui
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) Oui
Système de fichiers du volume partagé de cluster (CsvFS) Oui
Système de fichiers résilient (ReFS) Oui
 

Exemples

L’exemple C++ suivant montre une utilisation de base de GetFullPathName, GetLongPathName et GetShortPathName. Pour obtenir un autre exemple d’allocation dynamique, consultez GetShortPathName.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define BUFSIZE 4096
#define LONG_DIR_NAME TEXT("c:\\longdirectoryname")

void _tmain(int argc, TCHAR *argv[])
{
    DWORD  retval=0;
    BOOL   success; 
    TCHAR  buffer[BUFSIZE]=TEXT(""); 
    TCHAR  buf[BUFSIZE]=TEXT(""); 
    TCHAR** lppPart={NULL};

   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [file]\n"), argv[0]);
      return;
   }

// Retrieve the full path name for a file. 
// The file does not need to exist.

    retval = GetFullPathName(argv[1],
                 BUFSIZE,
                 buffer,
                 lppPart);
    
    if (retval == 0) 
    {
        // Handle an error condition.
        printf ("GetFullPathName failed (%d)\n", GetLastError());
        return;
    }
    else 
    {
        _tprintf(TEXT("The full path name is:  %s\n"), buffer);
        if (lppPart != NULL && *lppPart != 0)
        {
            _tprintf(TEXT("The final component in the path name is:  %s\n"), *lppPart);
        }
    }


// Create a long directory name for use with the next two examples.

    success = CreateDirectory(LONG_DIR_NAME,
                              NULL);

    if (!success)
    {
        // Handle an error condition.
        printf ("CreateDirectory failed (%d)\n", GetLastError());
        return;
    }


// Retrieve the short path name.  

    retval = GetShortPathName(LONG_DIR_NAME,
                  buf,
                  BUFSIZE);

    if (retval == 0) 
    {
        // Handle an error condition.
         printf ("GetShortPathName failed (%d)\n", GetLastError());
         return;
    }
    else _tprintf(TEXT("The short name for %s is %s\n"), 
                  LONG_DIR_NAME, buf);


// Retrieve the long path name.  

    retval = GetLongPathName(buf,
              buffer,
              BUFSIZE);

    if (retval == 0) 
    {
        // Handle an error condition.
         printf ("GetLongPathName failed (%d)\n", GetLastError());
         return;
    }
    else _tprintf(TEXT("The long name for %s is %s\n"), buf, buffer);

// Clean up the directory.

    success = RemoveDirectory(LONG_DIR_NAME);
    if (!success)
    {
        // Handle an error condition.
        printf ("RemoveDirectory failed (%d)\n", GetLastError());
        return;
    }
}

Notes

L’en-tête fileapi.h définit GetFullPathName comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête fileapi.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

Fonctions de gestion des fichiers

GetFullPathNameTransacted

GetLongPathName

GetShortPathName

GetTempPath

SearchPath