Retrieves the full path and file name of the specified file.
To perform this operation as a transacted operation, use the GetFullPathNameTransacted function.
For more information about file and path names, see
Naming a File.
Syntax
|
DWORD WINAPI GetFullPathName(
__in LPCTSTR lpFileName,
__in DWORD nBufferLength,
__out LPTSTR lpBuffer,
__out LPTSTR *lpFilePart
);
|
Parameters
- lpFileName [in]
-
The name of the file.
This parameter can be a short (the 8.3 form) or long file name. This string can also be a share or volume name.
In the ANSI version of this function, the name is limited to
MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode
version of the function and prepend "\\?\" to the path. For more information, see
Naming a File.
- nBufferLength [in]
-
The size of the buffer to receive the null-terminated string for the drive and path, in TCHARs.
- lpBuffer [out]
-
A pointer to a buffer that receives the null-terminated string for the drive and path.
- lpFilePart [out]
-
A pointer to a buffer that receives the address (within lpBuffer) of the final file name component in the path.
This parameter can be NULL.
If lpBuffer refers to a directory and not a file, lpFilePart receives zero.
Return Value
If the function succeeds, the return value is the length, in TCHARs, of the string copied to lpBuffer, not including the terminating null character.
If the lpBuffer buffer is too small to contain the path, the return value is the size, in TCHARs, of the buffer that is required to hold the path and the terminating null character.
If the function fails for any other reason, the return value is zero. To get extended error information, call
GetLastError.
Remarks
GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. It also calculates the address of the file name portion of the full path and file name
This function does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume.
Note that the lpFilePart parameter does not require string buffer space, but only enough for a single address. This is because it simply returns an address within the buffer that already exists for lpBuffer.
Share and volume names are valid input for lpFileName. For example, the following list identities the returned path and file names if test-2 is a remote computer and U: is a network mapped drive:
- If you specify "\\test-2\q$\lh" the path returned is "\\test-2\q$\lh
"
- If you specify "\\?\UNC\test-2\q$\lh" the path returned is "\\?\UNC\test-2\q$\lh"
- If you specify "U:" the path returned is "U:\"
GetFullPathName does not convert the specified file name, lpFileName. If the specified file name exists, you can use
GetLongPathName or
GetShortPathName to convert to long or short path names, respectively.
If the return value is greater than the value specified in nBufferLength, you can call the function again with a buffer that is large enough to hold the path. For an example of this case in addition to using zero-length buffer for dynamic allocation, see the Example Code section.
Note Although the return value in this case is a length that includes the terminating null character, the return value on success does not include the terminating null character in the count.
Examples
The following C++ example shows a basic use of GetFullPathName, GetLongPathName, and GetShortPathName. For another example using dynamic allocation, see GetShortPathName.
|
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define BUFSIZE 4096
#define LONG_DIR_NAME TEXT("c:\\longdirectoryname")
// GetFullPathName Example
void gfpnExample(TCHAR* filename)
{
DWORD retval = 0;
TCHAR fullPath[BUFSIZE]=TEXT("");
LPTSTR lpszFilePart = NULL;
retval = GetFullPathName(filename,
BUFSIZE,
fullPath,
&lpszFilePart);
if (retval == 0)
{
// Handle an error condition.
printf ("GetFullPathName failed (%d)\n", GetLastError());
return;
}
_tprintf(TEXT("The full path name is: %s\n"), fullPath);
if (*lpszFilePart != NULL)
{
_tprintf(TEXT("The file name part is: %s\n"), lpszFilePart);
}
}
// GetShortPathName and GetLongPathName Example
void gpnExample(TCHAR* pathname)
{
DWORD retval = 0;
TCHAR shortName[BUFSIZE] = {0};
TCHAR longName[BUFSIZE] = {0};
// Retrieve the short path name.
retval = GetShortPathName(pathname,
shortName,
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"), pathname, shortName);
// Retrieve the long path name.
retval = GetLongPathName(shortName,
longName,
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"), shortName, longName);
}
void _tmain(
int argc,
TCHAR *argv[]
)
{
if( argc < 2 )
{
_tprintf(TEXT("Usage: %s [filename] <path>\n"), argv[0]);
_tprintf(TEXT("[filename] can be a full or partial path, existing or not.\n"));
_tprintf(TEXT("If <path> is not provided, a default path will be used.\n"));
return;
}
// Part 1:
// GetFullPathName
gfpnExample(argv[1]);
// Part 2:
// GetShortPathName and GetLongPathName
TCHAR* path = NULL;
if (argc < 3)
{
// Create a long directory name for use with the next example.
path = LONG_DIR_NAME;
if (!CreateDirectory(LONG_DIR_NAME, NULL))
{
// Handle an error condition.
printf ("CreateDirectory failed (%d)\n", GetLastError());
return;
}
}
else
{
path = argv[2];
}
gpnExample(path);
if (argc < 3)
{
// Clean up the temp directory.
if (!RemoveDirectory(LONG_DIR_NAME))
{
// Handle an error condition.
printf ("RemoveDirectory failed (%d)\n", GetLastError());
return;
}
}
}
|
Requirements
| Client | Requires Windows Vista, Windows XP, or Windows 2000 Professional. |
| Server | Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server. |
|---|
| Header | Declared in WinBase.h; include Windows.h. |
| Library | Use Kernel32.lib. |
| DLL | Requires Kernel32.dll. |
| Unicode/ANSI | Implemented as GetFullPathNameW (Unicode) and GetFullPathNameA (ANSI). |
See Also
File Management Functions
GetFullPathNameTransacted
GetLongPathName
GetShortPathName
GetTempPath
SearchPath
Send comments about this topic to Microsoft
Build date: 10/2/2008