DOBON.NETプログラミング道掲示板

■34538 / 親記事)  デスクトップ と 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 / ResNo.1)  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 / ResNo.2)  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 / ResNo.3)  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 / ResNo.4)  Re[3]: デスクトップ と Desktop
□投稿者/ 魔界の仮面弁士 大御所(1299回)-(2020/09/28(Mon) 10:02:09)
  • アイコンNo34540に返信(Vettyさんの記事)
    > Environment.SpecialFolder.OneDriveDirectory

    古い環境(SkyDrive やそれ以前も含む)を除外して良いのなら、

     MsgBox(Environ("OneDriveConsumer"))
     MsgBox(Environ("OneDrive"))

    でどうでしょう。
違反を報告
引用返信 削除キー/
■34543 / ResNo.5)  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 / ResNo.6)  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/


- Child Tree -