0

現在、ユーザーセットのディレクトリとサブディレクトリで音楽ファイルを検索し、それらをコレクションに追加するプログラムがあります。ただし、それが通過するディレクトリの1つが保護されている場合、プログラムはフォールオーバーします。この問題を回避するために、検索を試みる前に、ユーザーがディレクトリにアクセスできるかどうかを確認する方法を知りたいと思いました。以下は私が検索に使用しているコードです。現在、「システムボリューム情報」の基本的な回避策が含まれていますが、他の保護されたディレクトリがある可能性があるため、これを変更してそれらを含めたいと思いました。

    public void SearchForMusic()
    {
        //Searches selected directory and its sub directories for music files and adds their path to ObservableCollection<string> MusicFound
        foreach (string ext in extentions)
        {
            foreach (string song in Directory.GetFiles(SearchDirectory, ext))
            {
                musicFound.Add(song);                   
            }

            foreach (string directory in Directory.GetDirectories(SearchDirectory))
            {
                if (directory.Contains("System Volume Information"))
                {

                }
                else
                {
                    foreach (string song in Directory.GetFiles(directory, ext))
                    {
                    musicFound.Add(song);
                    }

                    foreach (string subDirectory in Directory.GetDirectories(directory))
                    {
                        foreach (string subSong in Directory.GetFiles(subDirectory, ext))
                        {
                            musicFound.Add(subSong);
                        }
                    }
                }
            }
        }
    }

どうもありがとう :)

4

2 に答える 2

2

ファイルシステムオブジェクトにアクセスできることを確認する最も簡単な方法は、アクセスを試みることです。アクセス拒否エラーで失敗した場合は、アクセスできません。そのエラー状態を検出して、検索の次の項目に進んでください。

言い換えれば、アクセス権の最終的な決定者であるシステムへのアクセスのチェックを委任します。

于 2011-09-17T13:40:28.293 に答える
1

この質問は、書き込み権限を読み取り権限に置き換えることで確認できます。また、コードをtry catchブロックでラップすると、例外がスローされた場合、ディレクトリをトラバースできないと想定できます(または例外タイプを適切にチェックして確認できます)。

于 2011-09-17T13:41:37.230 に答える