用SHGetFolderPath()TCHAR szPath[MAX_PATH]
...
if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, O, szPath)) 
{
PathAppend(szPath, TEXT("New Doc.txt"));
HANDLE hFile = CreateFile(szPath, ...);
}

解决方案 »

  1.   

    示例:
    TCHAR szPath[MAX_PATH]
    ...
    if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, O, szPath)) 
    {
    PathAppend(szPath, TEXT("New Doc.txt"));
    HANDLE hFile = CreateFile(szPath, ...);
    }具体用法可参见MSDN
      

  2.   

    SHBrowseForFolder
    Displays a dialog box that enables the user to select a Shell folder. 下面是例程:
    char ini_filename[MAX_PATH] ; LPMALLOC pMalloc;
    SHGetMalloc(&pMalloc);
        BROWSEINFO bi;
    char  lpBuffer[MAX_PATH]; 
    int i = 0;
        LPITEMIDLIST pidlBrowse;    // PIDL selected by user   strcpy(lpBuffer, ""); // Fill in the BROWSEINFO structure.
    bi.hwndOwner = m_hWnd; 
        bi.pidlRoot = NULL;
    bi.pszDisplayName = lpBuffer; 
        bi.lpszTitle = "选择目录";
    bi.ulFlags = 0; 
        bi.lpfn = NULL;
    bi.lParam = 0;  
        
    // Browse for a folder and return its PIDL. 
        pidlBrowse = SHBrowseForFolder(&bi);
    if (pidlBrowse != NULL) {  
            // Show the display name, title, and file system path. 
            if (SHGetPathFromIDList(pidlBrowse, lpBuffer)) 
    {
                        ......
    }        // Free the PIDL returned by SHBrowseForFolder. 
            pMalloc->Free(pidlBrowse);