0

私はこのコードを書き、任意のフォルダーを選択すると機能しますsearch option = SearchOption.AllDirectories(

D:\エラーが発生するようなドライブ

「パス D:\System Volume Information へのアクセスが拒否されました」

このパスに追加"\" しますが、それでもエラーが発生します

        if (dirListBox.Items.Count == 0)
        {
            foreach (int Index in disksListBox.CheckedIndices)
            {
                String Dir = disksListBox.Items[Index].ToString().Substring(0, 2);
                Dir += @"\";
                if (CheckExists(Dir))
                {
                    Dirs.Add(Dir);
                }
            }
        }
        else
        {
            for (int Index = 0; Index < dirListBox.Items.Count; Index++)
            {
                String Dir = dirListBox.Items[Index].ToString();
                Dirs.Add(Dir);
             }
        }
        if (rdb_thisdir.Checked == true)
            OptionDir = SearchOption.TopDirectoryOnly; 
        else
            OptionDir = SearchOption.AllDirectories; // when search D:\ , Get Error But Work for Folder

        if (rdbversion1.Checked == true)
        {
            ListViewItem lstitm = new ListViewItem();
            foreach (String Dir in Dirs)
            {
                try
                {
                    DirectoryInfo DirInfo = new DirectoryInfo(Dir);
                    FileInfo[] FileS = DirInfo.GetFiles(SearchPattern,OptionDir); //error when Dir="D:\\"

                    foreach (FileInfo file in FileS)
                    {
                        try
                        {
                            if (Check_Attributes(file) && Check_DateTime(file))
                            {
                                listFileFounded.Items.Add(file.FullName.ToString());
                                lstitm = lwfound.Items.Add(file.Extension.ToString());
                                lstitm.SubItems.Add(file.Name.ToString());
                                lstitm.SubItems.Add((file.Length / 1024).ToString());
                                lstitm.SubItems.Add(file.Attributes.ToString());
                                lstitm.SubItems.Add(file.FullName.ToString());
                            }
                        }
                        catch
                        { }
                    }
                }
                catch ()
                {                  
                }
            }
4

2 に答える 2

1

D: ドライブには、アクセスする権限のない「システム ボリューム情報」フォルダが含まれています。したがって、アクセスしないか、例外をキャッチして好みに合わせて処理する必要があります。自分の PC 以外ではフォルダーにアクセスできないことは珍しくありません。そのため、ユーザー インターフェイスでそのシナリオを処理することを検討することをお勧めします。フォルダをグレーでペイントしたり、ロック アイコンなどを表示したりします。

于 2013-05-17T10:37:24.890 に答える
0

やり方にはコツがありました。このフォルダへの共有を有効にします。

詳しくはIDはこちら

または、このトリックを行います.....

 static void RecursiveGetFiles(string path)
{
    DirectoryInfo dir = new DirectoryInfo(path);
    try
    {

        foreach (FileInfo file in dir.GetFiles())
        {
            MessageBox.Show(file.FullName);
        }
    }
    catch (UnauthorizedAccessException)
    {

        Console.WriteLine("Access denied to folder: " + path);
    }

    foreach (DirectoryInfo lowerDir in dir.GetDirectories())
    {
        try
        {
            RecursiveGetFiles(lowerDir.FullName);

        }
        catch (UnauthorizedAccessException)
        {

            MessageBox.Show("Access denied to folder: " + path);
        }
    }
}

}

カミル・クラシンスキーが答えた..ここ

于 2013-05-19T15:33:58.857 に答える