none
RECYCLE.BINを触れない RRS feed

  • 質問

  • お世話になっております。

    自作のバージョンアップツールを作っているのですが、ユーザの環境により
    同じアプリのバージョン違いを[.bak]や[.old]のように複数混在させているようです。

    そこで、インストール(といってもコピペしただけ)のものを列挙してユーザに
    選択させることにしました。

    ユーザはアプリをC直下においたりProgramFileに置いたり自由に設定している
    ようなのでC直下からアプリの場所を検索しようとしたところで異常が発生しました。

    RECYCLE.BINにアクセスした途端にエラーで落ちるのです。
    検索するとTryで拾うとか出てきますが

    一気に指定フォルダ配下を検索するとその時点でアウト、EnumerateFilesを使って
    一つ一つ判定しようとしてもそこにアクセスした時点でアウト
    Tryで異常を拾おうがForeachの途中なので次へ進めない。

    ゴミ箱を消す方法も試しましたが、Admin権限で実行しても同ファイルは残っており
    登録ユーザを削除するしかないようです。

    識者のかたお知恵を貸してください。

    2019年5月31日 0:13

回答

  • 以下を参考にされたのでしょうか?

    【C#】ドライブ直下からのファイルリスト取得について
    https://qiita.com/OneK/items/8b0d02817a9f2a2fbeb0

    私の方で上記のコードを実行してみましたが、問題なく$Recycle.Binは例外でSkipされていました。
    つまり、上記のコードは途中でこけることなく最後まで実行されました。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク コーベル 2019年5月31日 1:50
    2019年5月31日 1:19
    モデレータ

すべての返信

  • 以下を参考にされたのでしょうか?

    【C#】ドライブ直下からのファイルリスト取得について
    https://qiita.com/OneK/items/8b0d02817a9f2a2fbeb0

    私の方で上記のコードを実行してみましたが、問題なく$Recycle.Binは例外でSkipされていました。
    つまり、上記のコードは途中でこけることなく最後まで実行されました。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク コーベル 2019年5月31日 1:50
    2019年5月31日 1:19
    モデレータ
  • trapemiyaさん、ご回答ありがとうございます。

    仰る通り、展開頂いたサイトも検索しました。

    結果は以下になります。

    上記は、tryを外していますがスキップされると検索を中止します。
    つまり、目的のExeを探せないという認識です。

    2019年5月31日 1:35
  • すみません、全てのコードをちゃんと展開せずに局所的に実行していました。

    正常に動作しているようです。

    SearchOption.AllDirectoriesをつけずにディレクトリを進めるということでしょうか。

    ありがとうとざいました(T T)

    2019年5月31日 1:50
  • なるほど。そういうことですか。
    GetFilesで例外が発生すれば、GetFilesは例外をはいてそこで終了してしまいます。そのはかれた例外をどうするかはGetFilesを呼び出している側の話になります。
    そのサイトのコードをよく見てみて下さい。再帰的にGetFilesを実行してファイル一覧を取得しています。つまり、GetFilesは例外の度に終了しますが、再帰的に実行されるので何度もGetFilesが実行されるためにうまく行くのです。

    (追記)
    >earchOption.AllDirectoriesをつけずにディレクトリを進めるということでしょうか。

    その通りです。再帰的にファイルを取得しているため、サブディレクトリまでファイルを取得するように指定してはいけません。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!


    • 編集済み trapemiyaModerator 2019年5月31日 2:15 よりわかりやすい表現に訂正
    2019年5月31日 2:07
    モデレータ
  • いつも、ご丁寧な説明ありがとうとございます。

    勉強させて頂きました!

    2019年5月31日 3:33