DOBON.NETプログラミング道掲示板
(現在 過去ログ4 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全7記事(1-7 表示) ] <<
0
>>
■34538
/ inTopicNo.1)
デスクトップ と Desktop
▼
■
□投稿者/ Vetty
一般人(1回)-(2020/09/25(Fri) 11:03:39)
環境/言語:[Windows10,VB2017,VB2019]
分類:[.NET]
Windows10 Home/Pro 両方
VisualStudio 2017/2019両方
すべて開発環境におけるDebug状態での実行
MsgBox(System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
で得られる文字列に
デスクトップ と Desktop の二種類があります
上記の混在環境においては常にそういう事態を予測しておくべきなのでしょうか?
引用返信
削除キー/
編集
削除
■34539
/ inTopicNo.2)
Re[1]: デスクトップ と Desktop
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1298回)-(2020/09/25(Fri) 17:08:06)
■
No34538
に返信(Vettyさんの記事)
> 上記の混在環境においては常にそういう事態を予測しておくべきなのでしょうか?
SpecialFolder で示されるパス内容は、実行環境によって異なります。
> デスクトップ と Desktop の二種類があります
DesktopDirectory で得られるパスは、
C:\Users\Administrator\Desktop
のようなパスになることもあれば、
C:\Documents and Settings\Administrator\Desktop
となることもあります。
C: ドライブの事もあれば、D: ドライブの事もあります。
最近の環境だと、OneDrive の管理下に配置されていることもあります。
アルファベットのみの "Desktop" ディレクトリが得られることもあれば、
半角カナの "テ゛スクトッフ゜" ディレクトリが得られることもあります。
[Win]+[E] キーを押して エクスプローラーを起動し、左側のツリーから
[デスクトップ] - [PC] - [デスクトップ] の階層を右クリックして
プロパティの [場所] タブで、別の場所を指定することもできます。
https://www.eripyon.com/mt/2019/01/move_onedrive_folder_to_original_user_folder.html
引用返信
削除キー/
編集
削除
■34540
/ inTopicNo.3)
Re[2]: デスクトップ と Desktop
▲
▼
■
□投稿者/ Vetty
一般人(2回)-(2020/09/27(Sun) 16:30:54)
回答ありがとうございます。
> SpecialFolder で示されるパス内容は、実行環境によって異なります。
最初の質問にあった msgbox(・・・ の本当の目的は、
Microsoftのサービスであり、 魔界の仮面弁士さんの回答にもある「OneDrive」に
存在するフォルダのPathの取得です。つまり
Environment.SpecialFolder.OneDriveDirectory
のようなものが欲しいわけです。
しかしMicrosoftの仕様ではそんなものはなさそうなので、エクスプローラから
手動で得られる
C:\Users\username\OneDrive\目的フォルダ
から想像して
System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
の文字列内の "\Desktop" を "\OneDrive\目的フォルダ" に置き換えればいい、
と考えそのようなコーディングをしてそのPCで動作OKを確認しました。
(そのソフト自体もOneDriveに保存してあります)
で、別の場所で別のPCから同じソフトをDebug状態で実行して今回の質問になったわけです。
今の段階では
デスクトップ
Desktop
半角カナの "テ゛スクトッフ゜"
の3種類をIf文で判断して置き換えるのが現実的な方法でしょうか?
引用返信
削除キー/
編集
削除
■34541
/ inTopicNo.4)
Re[3]: デスクトップ と Desktop
▲
▼
■
□投稿者/ Hongliang
大御所(587回)-(2020/09/27(Sun) 17:03:00)
親フォルダのパスを取得するなら、System.IO名前空間PathクラスのGetDirectoryName静的メソッドを使えます。
パスの結合は同じくPathクラスのCombine静的メソッドでできます。
一般に C:\Users\ユーザ名 となっているフォルダのパスは、わざわざデスクトップフォルダ経由ではなくても SpecialFolder.UserProfile を使えば直接取得できます。
ただ限られた環境ならそれでもいいかもしれませんが、汎用的にはダメそうですね。
https://nj-clucker.com/move-onedrive-directory/
引用返信
削除キー/
編集
削除
■34542
/ inTopicNo.5)
Re[3]: デスクトップ と Desktop
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1299回)-(2020/09/28(Mon) 10:02:09)
■
No34540
に返信(Vettyさんの記事)
> Environment.SpecialFolder.OneDriveDirectory
古い環境(SkyDrive やそれ以前も含む)を除外して良いのなら、
MsgBox(Environ("OneDriveConsumer"))
MsgBox(Environ("OneDrive"))
でどうでしょう。
引用返信
削除キー/
編集
削除
■34543
/ inTopicNo.6)
Re[4]: デスクトップ と Desktop
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1300回)-(2020/09/28(Mon) 10:11:42)
■
No34542
に追記(魔界の仮面弁士の記事)
> MsgBox(Environ("OneDriveConsumer"))
> MsgBox(Environ("OneDrive"))
Windows 10 のバージョンが古い場合や、Windows 10 未満のバージョンでは、
上記の OneDrive for Business や OneDrive の環境変数が存在しない事もあります。
環境変数からパスが選らなかった場合には、さらに追加で
HKEY_CURRENT_USER\SOFTWARE\Microsoft\OneDrive\UserFolder
のレジストリエントリを探し、それも見当たらなければ、
HKEY_CURRENT_USER\SOFTWARE\Microsoft\SkyDrive\UserFolder
を探せばよいのでは無いでしょうか。
引用返信
削除キー/
編集
削除
■34544
/ inTopicNo.7)
Re[5]: デスクトップ と Desktop
▲
▼
■
□投稿者/ Vetty
一般人(3回)-(2020/09/28(Mon) 21:58:22)
Hongliang 大御所 さま ありがとうございます
>SpecialFolder.UserProfile を使えば直接取得できます。
これが今回の私の目的を実現する本来の方法だったんですね。
魔界の仮面弁士 さま ありがとうございます
> MsgBox(Environ("OneDriveConsumer"))
> MsgBox(Environ("OneDrive"))
DOS窓の Setコマンドで見えるやつですね。
思い出しました。
こんなところもUpdateされているとは・・・
>Windows 10 のバージョンが古い場合や、Windows 10 未満のバージョンでは、
>上記の OneDrive for Business や OneDrive の環境変数が存在しない事もあります。
今回の対象ユーザは少人数身近なメンバーですのでその辺の心配はないはず。
ありがとうございました。
解決
済
み!
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-