Fungsi GetFullPathNameA (fileapi.h)

Mengambil jalur lengkap dan nama file dari file yang ditentukan.

Untuk melakukan operasi ini sebagai operasi yang ditransaksikan, gunakan fungsi GetFullPathNameTransacted .

Untuk informasi selengkapnya tentang nama file dan jalur, lihat Nama File, Jalur, dan Namespace.

Catatan Lihat bagian Keterangan untuk diskusi tentang penggunaan jalur relatif dengan fungsi GetFullPathName di aplikasi multithreaded atau kode pustaka bersama.

Sintaks

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

Parameter

[in] lpFileName

Nama file.

Parameter ini bisa berupa singkat (formulir 8.3) atau nama file panjang. String ini juga bisa menjadi nama berbagi atau volume.

[in] nBufferLength

Ukuran buffer untuk menerima string yang dihentikan null untuk drive dan jalur, dalam TCHAR.

[out] lpBuffer

Penunjuk ke buffer yang menerima string yang dihentikan null untuk drive dan jalur.

[out] lpFilePart

Penunjuk ke buffer yang menerima alamat (dalam lpBuffer) dari komponen nama file akhir di jalur.

Parameter ini bisa NULL.

Jika lpBuffer mengacu pada direktori dan bukan file, lpFilePart menerima nol.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah panjangnya, dalam TCHAR, dari string yang disalin ke lpBuffer, tidak termasuk karakter null yang mengakhiri.

Jika buffer lpBuffer terlalu kecil untuk memuat jalur, nilai yang dikembalikan adalah ukuran, dalam TCHAR, dari buffer yang diperlukan untuk menahan jalur dan karakter null yang mengakhiri.

Jika fungsi gagal karena alasan lain, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

GetFullPathName menggabungkan nama drive dan direktori saat ini dengan nama file tertentu untuk menentukan jalur lengkap dan nama file dari file tertentu. Ini juga menghitung alamat bagian nama file dari jalur lengkap dan nama file.

Fungsi ini tidak memverifikasi bahwa jalur dan nama file yang dihasilkan valid, atau bahwa mereka melihat file yang ada pada volume terkait.

Perhatikan bahwa parameter lpFilePart tidak memerlukan ruang buffer string, tetapi hanya cukup untuk satu alamat. Ini karena hanya mengembalikan alamat dalam buffer yang sudah ada untuk lpBuffer.

Nama berbagi dan volume adalah input yang valid untuk lpFileName. Misalnya, identitas daftar berikut jalur dan nama file yang dikembalikan jika test-2 adalah komputer jarak jauh dan U: adalah drive yang dipetakan jaringan yang direktorinya saat ini adalah akar volume:

  • Jika Anda menentukan "\\test-2\q$\lh" jalur yang dikembalikan adalah "\\test-2\q$\lh"
  • Jika Anda menentukan "\\?\UNC\test-2\q$\lh" jalur yang dikembalikan adalah "\\\?\UNC\test-2\q$\lh"
  • Jika Anda menentukan "U:" jalur yang dikembalikan adalah direktori saat ini pada drive "U:\"
GetFullPathName tidak mengonversi nama file yang ditentukan, lpFileName. Jika nama file yang ditentukan ada, Anda dapat menggunakan GetLongPathName atau GetShortPathName untuk mengonversi ke nama jalur panjang atau pendek.

Jika nilai yang dikembalikan lebih besar dari atau sama dengan nilai yang ditentukan dalam nBufferLength, Anda dapat memanggil fungsi lagi dengan buffer yang cukup besar untuk menahan jalur. Untuk contoh kasus ini selain menggunakan buffer panjang nol untuk alokasi dinamis, lihat bagian Contoh Kode.

Catatan Meskipun nilai yang dikembalikan dalam kasus ini adalah panjang yang mencakup karakter null yang mengakhiri, nilai pengembalian pada keberhasilan tidak menyertakan karakter null yang mengakhiri dalam hitungan.

Jalur relatif yang diteruskan ke fungsi GetFullPathName ditafsirkan relatif terhadap direktori proses saat ini. Status direktori saat ini yang ditulis oleh fungsi SetCurrentDirectory bersifat global untuk proses dan dapat diubah oleh utas apa pun kapan saja. Aplikasi harus menyadari bahwa panggilan berturut-turut ke fungsi GetFullPathName dengan jalur relatif dapat menghasilkan hasil yang berbeda jika direktori saat ini berubah di antara kedua panggilan.

Untuk menghindari masalah yang disebabkan oleh hasil yang tidak konsisten, aplikasi multithreaded dan kode pustaka bersama harus menghindari penggunaan jalur relatif. Jika jalur relatif diterima, jalur harus dikonsumsi tepat sekali, baik dengan melewati jalur relatif langsung ke fungsi seperti CreateFile, atau dengan mengonversinya ke jalur absolut dan menggunakan jalur absolut dari titik tersebut ke depan.

Di Windows 8 dan Windows Server 2012, fungsi ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Ya
SMB 3.0 Transparent Failover (TFO) Ya
SMB 3.0 dengan Berbagi File Peluasan Skala (SO) Ya
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Ya
 

Contoh

Contoh C++ berikut menunjukkan penggunaan dasar GetFullPathName, GetLongPathName, dan GetShortPathName. Untuk contoh lain menggunakan alokasi dinamis, lihat 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;
    }
}

Catatan

Header fileapi.h mendefinisikan GetFullPathName sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta praproscessor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header fileapi.h (sertakan Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

Fungsi Manajemen File

GetFullPathNameTransacted

GetLongPathName

GetShortPathName

GetTempPath

SearchPath