How To Get System Folder Path(C:\Windows C:\Program Files) in Windows using C++?

57,493

Solution 1

Using Win32 API>

For the Windows folder:

TCHAR windir[MAX_PATH];
GetWindowsDirectory(windir, MAX_PATH);

For program files:

TCHAR pf[MAX_PATH];
SHGetSpecialFolderPath(
    0,
    pf, 
    CSIDL_PROGRAM_FILES, 
    FALSE ); 

Where MAX_PATH comes from the Windows headers and will guarantee the buffer is long enough for the longest (non-UNC) path.

Also, note that SHGetSpecialFolderPath can be used to retrieve other "special" folder including the Windows folder just by replacing the third parameter to any from this list.

Solution 2

Solution 3

On Vista+, SHGetKnownFolderPath is the replacement for SHGetFolderPath and SHGetSpecialFolderPath, although you can continue to use the older functions if you need backward compatibility to older versions of Windows.

Solution 4

Call getenv("%ProgramFiles%") and getenv("%WinDir%")

Solution 5

Most of these come from SHGetFolderPath, but GetSystemDirectory() returns the absolute location of C:\Windows\System32. Don't use GetWindowsDirectory(). It doesn't do what you want anymore.

Share:
57,493
sxingfeng
Author by

sxingfeng

Updated on September 02, 2021

Comments

  • sxingfeng
    sxingfeng over 2 years

    I am programming in c++ MFC,

    I want to get "C:\windows" "c:\program files" folder path.

    Sometimes user may setup windows in other folder such as c:\windows0.

    Is there any API to get absolute path of the windows and program files path?

    Many thanks!