特殊ディレクトリのパスを設定する

タグの編集
投稿者 N88-Basic  (社会人) 投稿日時 2023/7/24 18:12:12
Windows 11 Home 64 + Visual Studio 2022(Basic) の環境において、

 System.Environment.GetFolderPath(Environment.SpecialFolder.????)) にて特殊ディレクトリのパスを取得できますが、データに関しては別の物理ドライブ(内臓)に保存しているようにしています。Document フォルダーも別ドライブ(OneDriveの対象)に保存しています。

 この状態において、アプリ上で System.Environment.GetFolderPath にてパスを取得してもシステムドライブのユーザーフォルダーのパスが得られます。これを、独自に設定したフォルダーが取得できるようにする方法をご存じでしたらご教授ください。

 現在は、対象ドライブを検索して処理するようにしていますが、ターゲットPCによって構成が異なるので一律に取得できればと考えています。

以上 よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/7/24 19:34:57
> データに関しては別の物理ドライブ(内臓)に保存しているようにしています。

ドライブのルートディレクトリではなく、そのサブフォルダーだけを別の物理ドライブにする手法もありますね。
C: ドライブはディスク #0 上のパーティションにあるけれど、
その下の Documents や Desktop フォルダーはディスク #1 上に置いたりとか。
https://atmarkit.itmedia.co.jp/ait/articles/0002/05/news001.html


> アプリ上で System.Environment.GetFolderPath にてパスを取得してもシステムドライブのユーザーフォルダーのパスが得られます。
どうやって特殊ディレクトリのパスを設定しましたか?

当方もデータを別ドライブに配置していますが、下記はいずれも
期待通りに D:\ で始まるパスを返してきます。
※もちろん Environment.GetEnvironmentVariable("HOMEDRIVE") は "C:" です。
s = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
s = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
s = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
s = My.Computer.FileSystem.SpecialDirectories.Desktop
s = My.Computer.FileSystem.SpecialDirectories.MyDocuments


念のため HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders の内容も確認してみてください。
投稿者 N88-BASIC  (社会人) 投稿日時 2023/7/26 11:36:22
魔界の仮面弁士 さん、ご連絡ありがとうございます。

以前から、 OneDrive とリンクした別ドライブのフォルダーを特殊ディレクトリに設定しておりましたが、OneDrive の設定を変更した関係からか特殊ディレクトリがオリジナルに戻ってしまったかもしれません。

特殊ディレクトリのパスは、システムドライブ内のユーザフォルダー内の ドキュメントフォルダのプロパティにおいて「場所」を別ドライブのフォルダー(例:Z:\OneDrive\PC_001\Documents)に設定しました。

今回はご指摘いただいたレジストリも C: ドライブ(規定?)の状態でした。前記処理を再度行うことで無事、System.Environment.GetFolderPath(Environment.SpecialFolder.***)で、OneDrive 上のフォルダーへのパスが取得できました。

今後とも、よろしくお願いします。