1

私のC++/ WinAPIアプリケーションでは、次のコードを使用してマイドキュメントフォルダのパスを取得します。

wchar_t path[MAX_PATH];
SHGetFolderPathW(NULL,CSIDL_PERSONAL,NULL,SHGFP_TYPE_CURRENT,path);

ユーザーの1人が、自分の企業ネットワークに接続されたPCで私のプログラムを実行しています。彼はネットワーク上にマイドキュメントフォルダを持っています。したがって、私のコードは\\ paq \ user.name $ \ My Documentsのようなものを返しますが、彼はMyDocumentsのローカルコピーを持っていると言っています。問題は、彼が「VPNをスワップ」すると、オンラインのマイドキュメントが使用できなくなり、システムエラーコード64「指定されたネットワーク名は使用できなくなりました」でプログラムがクラッシュすることです(オンラインで開いたファイルに書き込もうとします。 docsフォルダー)。

C ++ / WinAPIを使用してローカルのマイドキュメントフォルダパスを常に取得するにはどうすればよいですか?

4

1 に答える 1

3

CSIDL_PERSONAL唯一の公式の「マイドキュメント」フォルダです。彼がそれをネットワークフォルダにリダイレクトした場合、VPNをオフにすると、Windowsでさえ「マイドキュメント」にアクセスできなくなります。さまざまなAppDataフォルダー(、、、および)とは異なりCSIDL_APPDATACSIDL_COMMON_APPDATAWindowsCSIDL_LOCAL_APPDATAにはローカルとリモートの「マイドキュメント」フォルダーを分離するという概念がないため、ローカルフォルダーを通常のフォルダーとして手動で作成する必要があり、ShellAPIはそれについて知らない。アプリがそれを見つける唯一の方法は、それがどこにあるかを彼に尋ねることです。

于 2012-11-03T22:57:34.630 に答える