特殊フォルダを決め打ちしないために

データを保存するためにどこかにファイルを出力します。
この時ウッカリ”C:¥Document and Settings¥Administrator¥My Documents¥”とか”C:¥WINDOWS¥System32¥”とかやると、後で痛い目に遭えます。
前者はVistaで死ねますし、後者はWindows2000で死ねます。
それ以前に、Cドライブ以外にインストールされた時点で即死です。
そういうモノは、然るべき当局筋にオウカガイを立てるのが筋ってもんです。
で、.NET環境なら話は簡単です。
System.Environment.GetFolderPath然るべき引数で呼んであげればよいだけですから。
しかし、VB6/VBAの場合には、Scripting.FileSystemObject の GetSpecialFolder メソッドで、引数は
・0 : WindowsFolder
・1 : SystemFolder
・2 : TemporaryFolder
の3つだけです。.NETのEnvironment.SpecialFolder列挙体に比べると、情けないぐらいに貧弱です。
ではどうするかと言うと、昔ながらのAPIコールという手が使えます。SHGetFolderPath を使用します。
説明はコチラ:MSDN – SHGetFolderPath Functionです。
引数であるCSIDLの説明はコチラ:MSDN – CSIDLです。
注)全てのCSIDLが使用できるわけではないようです。詳しくはSHGetFolderPathの説明(英文)をご覧ください。
両方とも英語で若干腰が引けるのが難点です。
KBには機械翻訳の解説資料があります。
そのものズバリ
Visual Basic からの SHGetFolderPath 関数の使用方法 (文書番号:252652)です。
KBの方にも書いてありますが、Windows2000以前のOSにはSHFolder.dllの再配布が必要なのでご注意ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree