Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengambil jalur lengkap dan nama file dari file yang ditentukan.
Untuk melakukan operasi ini sebagai operasi yang ditransaksikan, gunakan fungsi
Untuk informasi selengkapnya tentang nama file dan jalur, lihat Nama File, Jalur, dan Namespace.
Sintaksis
DWORD GetFullPathNameA(
[in] LPCSTR lpFileName,
[in] DWORD nBufferLength,
[out] LPSTR lpBuffer,
[out] LPSTR *lpFilePart
);
Parameter
[in] lpFileName
Nama file.
Parameter ini bisa berupa nama file pendek (formulir 8.3) atau panjang. String ini juga dapat 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 null-terminated untuk drive dan jalur.
[out] lpFilePart
Penunjuk ke buffer yang menerima alamat (dalam lpBuffer) dari komponen nama file akhir di jalur.
Parameter ini dapat null.
Jika lpBuffer mengacu pada direktori dan bukan file, lpFilePart menerima nol.
Mengembalikan nilai
Jika fungsi berhasil, nilai pengembalian adalah panjangnya, dalam TCHAR, dari string yang disalin ke lpBuffer, tidak termasuk karakter null yang mengakhiri.
Jika buffer lpBuffer
Jika fungsi gagal karena alasan lain, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
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 yang dihasilkan dan nama file valid, atau bahwa mereka melihat file yang ada pada volume terkait.
Perhatikan bahwa parameter
Nama berbagi dan volume adalah input yang valid untuk lpFileName. Misalnya, daftar identitas 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:\"
Jika nilai pengembalian 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 Kode Contoh.
Jalur relatif yang diteruskan ke fungsi
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 |
Failover Transparan (TFO) SMB 3.0 | Ya |
SMB 3.0 dengan Scale-out File Shares (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;
}
}
Nota
Header fileapi.h mendefinisikan GetFullPathName sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosektor 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
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
server minimum yang didukung |
Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Platform Target |
Windows |
Header |
fileapi.h (termasuk Windows.h) |
Pustaka |
Kernel32.lib |
DLL |
Kernel32.dll |
Lihat juga
GetTempPath