Partilhar via


Função GetFullPathNameA (fileapi.h)

Recupera o caminho completo e o nome do arquivo do arquivo especificado.

Para executar essa operação como uma operação transacionada, use a função GetFullPathNameTransacted.

Para obter mais informações sobre nomes de arquivo e caminho, consulte Nomes de Arquivo, Caminhos e Namespaces.

Observação Consulte a seção Comentários para discussão sobre o uso de caminhos relativos com a função GetFullPathName em aplicativos multithreaded ou código de biblioteca compartilhada.

Sintaxe

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

Parâmetros

[in] lpFileName

O nome do arquivo.

Esse parâmetro pode ser curto (o formulário 8.3) ou um nome de arquivo longo. Essa cadeia de caracteres também pode ser um nome de compartilhamento ou volume.

[in] nBufferLength

O tamanho do buffer para receber a cadeia de caracteres terminada em nulo para a unidade e o caminho, em TCHARs.

[out] lpBuffer

Um ponteiro para um buffer que recebe a cadeia de caracteres terminada em nulo para a unidade e o caminho.

[out] lpFilePart

Um ponteiro para um buffer que recebe o endereço (em lpBuffer) do componente de nome de arquivo final no caminho.

Esse parâmetro pode ser NULL.

Se lpBuffer se referir a um diretório e não a um arquivo, lpFilePart receberá zero.

Valor de retorno

Se a função for bem-sucedida, o valor retornado será o comprimento, em TCHARs, da cadeia de caracteres copiada para lpBuffer, sem incluir o caractere nulo de terminação.

Se o lpBuffer buffer for muito pequeno para conter o caminho, o valor retornado será o tamanho, em TCHARs, do buffer necessário para manter o caminho e o caractere nulo de terminação.

Se a função falhar por qualquer outro motivo, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Observações

GetFullPathName mescla o nome da unidade e do diretório atual com um nome de arquivo especificado para determinar o caminho completo e o nome do arquivo de um arquivo especificado. Ele também calcula o endereço da parte do nome do arquivo do caminho completo e do nome do arquivo.

Essa função não verifica se o caminho resultante e o nome do arquivo são válidos ou se eles veem um arquivo existente no volume associado.

Observe que o parâmetro lpFilePart não requer espaço de buffer de cadeia de caracteres, mas apenas o suficiente para um único endereço. Isso ocorre porque ele simplesmente retorna um endereço dentro do buffer que já existe para lpBuffer.

Os nomes de compartilhamento e volume são entradas válidas para lpFileName. Por exemplo, a lista a seguir identifica o caminho retornado e os nomes de arquivo se test-2 for um computador remoto e U: é uma unidade mapeada de rede cujo diretório atual é a raiz do volume:

  • Se você especificar "\\test-2\q$\lh" o caminho retornado será "\\test-2\q$\lh"
  • Se você especificar "\\?\UNC\test-2\q$\lh" o caminho retornado será "\\?\UNC\test-2\q$\lh"
  • Se você especificar "U:" o caminho retornado será o diretório atual na unidade "U:\"
GetFullPathName não converte o nome do arquivo especificado, lpFileName. Se o nome do arquivo especificado existir, você poderá usar GetLongPathName ou GetShortPathName para converter em nomes de caminho longo ou curto, respectivamente.

Se o valor retornado for maior ou igual ao valor especificado em nBufferLength, você poderá chamar a função novamente com um buffer grande o suficiente para manter o caminho. Para obter um exemplo desse caso, além de usar o buffer de comprimento zero para alocação dinâmica, consulte a seção Código de Exemplo.

Observação Embora o valor retornado nesse caso seja um comprimento que inclui o caractere nulo de encerramento, o valor retornado no êxito não inclui o caractere nulo de terminação na contagem.

Os caminhos relativos passados para a função GetFullPathName são interpretados como relativos ao diretório atual do processo. O estado do diretório atual escrito pela função SetCurrentDirectory é global para o processo e pode ser alterado por qualquer thread a qualquer momento. Os aplicativos devem estar cientes de que chamadas consecutivas para a função GetFullPathName com um caminho relativo podem produzir resultados diferentes se o diretório atual for alterado entre as duas chamadas.

Para evitar problemas causados por resultados inconsistentes, aplicativos multithreaded e código de biblioteca compartilhada devem evitar o uso de caminhos relativos. Se um caminho relativo for recebido, ele deverá ser consumido exatamente uma vez, passando o caminho relativo diretamente para uma função como CreateFileou convertendo-o em um caminho absoluto e usando o caminho absoluto desse ponto para frente.

No Windows 8 e no Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Suportado
Protocolo SMB (Bloco de Mensagens do Servidor) 3.0 Sim
TFO (Failover Transparente) do SMB 3.0 Sim
SMB 3.0 com Compartilhamentos de Arquivos de Expansão (SO) Sim
Sistema de Arquivos de Volume Compartilhado de Cluster (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim
 

Exemplos

O exemplo C++ a seguir mostra um uso básico de GetFullPathName, GetLongPathNamee GetShortPathName. Para obter outro exemplo usando a alocação dinâmica, consulte 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;
    }
}

Nota

O cabeçalho fileapi.h define GetFullPathName como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho fileapi.h (inclua Windows.h)
biblioteca Kernel32.lib
de DLL Kernel32.dll

Consulte também

Funções de gerenciamento de arquivos

GetFullPathNameTransacted

GetLongPathName

GetShortPathName

GetTempPath

SearchPath