Zastanawiałem się, czy istnieje sposób na rozwiązanie problemu, który mam z tym kodem:

DriveInfo[] dDrives = DriveInfo.GetDrives();
foreach(DriveInfo dDrive in dDrives)
{
    try
    {
        string sDrive = dDrive.ToString();
        string[] sSearch = Directory.GetFiles(sDrive, sFile, SearchOption.AllDirectories);
        foreach(string sResult in sSearch)
        {
            textBox2.Text = sResult + Environment.NewLine;
        }
    }
    catch
    {
    }
}

Gdy natrafi na plik, który nie jest dostępny ze względu na uprawnienia, zostanie przechwycony i zakończony. Muszę to zrobić, jeśli natrafi na plik, do którego nie ma dostępu, wróć do bloku try i kontynuuj wyszukiwanie. Każda pomoc jest mile widziana, dzięki!

1
Bali C 20 lipiec 2011, 16:45
 – 
Justin
20 lipiec 2011, 17:01
 – 
xan
20 lipiec 2011, 18:39

2 odpowiedzi

Najlepsza odpowiedź

EDYTUJ: Usunięto oryginalną odpowiedź jako nieprawidłową.

Zobacz: UnauthorizedAccessException nie może rozwiązać awarii Directory.GetFiles, aby znaleźć sugerowane rozwiązania Twojego problemu.

1
Community 23 maj 2017, 14:47

Kod, który masz, powinien działać, chociaż naprawdę powinieneś przemyśleć swoją logikę, używanie wyjątków do kontroli przepływu jest po prostu błędne.

To zadziała, choć nie jest to najlepsza praktyka:

string sDrive = dDrive.ToString();
try
{
   string[] sSearch = Directory.GetFiles(sDrive, sFile, SearchOption.AllDirectories);
}
catch {}

foreach(string sResult in sSearch)
{
    textBox2.Text = sResult + Environment.NewLine;
}

Gdzie dokładnie uzyskujesz dostęp do plików? Widzę tylko wywołanie listy nazw plików (Directory.GetFiles) i listę zwróconych nazw plików.

1
Oded 20 lipiec 2011, 17:47
Tak, dzięki, jaka byłaby lepsza alternatywa dla korzystania z wyjątków?
 – 
Bali C
20 lipiec 2011, 16:54
- Gdzie dokładnie uzyskujesz dostęp do plików w swoim kodzie?
 – 
Oded
20 lipiec 2011, 16:56
Przypuszczałem, że to tutaj: string[] sSearch = Directory.GetFiles(sDrive, sFile, SearchOption.AllDirectories);
 – 
Bali C
20 lipiec 2011, 17:00
- zamiast usuwać wyjątek, zarejestruj go, aby dokładnie zobaczyć, co się dzieje.
 – 
Oded
20 lipiec 2011, 17:00
Błąd programu VS to „Odmowa dostępu do ścieżki 'C:\C:\$Recycle.Bin\S-1-5-21-232317210-4223013802-3689919456-1000\” w wierszu ciągu [] sSearch = Directory.GetFiles(sDrive, sFile, SearchOption.AllDirectories);
 – 
Bali C
20 lipiec 2011, 17:11