在我的C ++ / WinAPI应用程序中,我使用以下代码获取My Documents文件夹路径:
wchar_t path[MAX_PATH];
SHGetFolderPathW(NULL,CSIDL_PERSONAL,NULL,SHGFP_TYPE_CURRENT,path);
其中一位用户在连接到公司网络的电脑上运行我的程序。他在网络上有My Documents文件夹。所以我的代码返回类似的东西 \\ paq \ user.name $ \ My Documents 虽然他说他有我的文件的本地副本。 问题是,当他'交换VPN'时,在线我的文档变得不可用,我的程序崩溃,系统错误代码64“指定的网络名称不再可用”(它试图写入在线打开的文件中docs文件夹)。
如何使用C ++ / WinAPI始终获取本地“我的文档”文件夹路径?
答案 0 :(得分:3)
CSIDL_PERSONAL
是唯一的官员"我的文件"夹。如果他将其重定向到网络文件夹,那么即使Windows也无法访问"我的文档"什么时候关闭VPN。与各种AppData文件夹(CSIDL_APPDATA
,CSIDL_COMMON_APPDATA
和CSIDL_LOCAL_APPDATA
)不同,Windows没有单独的本地和远程"我的文档"文件夹,所以他必须手动创建任何本地文件夹作为普通文件夹,因此Shell API不会知道它。你的应用程序找到它的唯一方法是问他在哪里。