Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Unterbruch rekursiver Funktion durch Blacklist (C-Sharp)

Mitglied: clragon

clragon (Level 1) - Jetzt verbinden

20.10.2017, aktualisiert 20:50 Uhr, 797 Aufrufe, 4 Kommentare

Hallo liebe Mit-Forum-Administratoren!

Ich bin auf ein pikantes Problem gestoßen dessen Lösung sich mir nicht von alleine erschließen will.

Folgendes ist Sache. In meinem neusten C# Projekt benutze ich eine Klasse namentlich FindFiles welche ich modifizieren wollte um
einen Filter für bestimmte Strings einzubauen.


Sieht in etwa so aus:

01.
class FindFiles
02.
    {
03.

04.
        // Wird mit Pfad, File-Vorlage ( zb *.txt ) uns rekursive - bool aufgerufen
05.
        public static IEnumerable<String> FindAccessableFiles(string path, string file_pattern, bool recurse)
06.
        {
07.
            Console.WriteLine(path);
08.
            var list = new List<string>();
09.
            var required_extension = "mp4";
10.

11.
            // if input is file do break
12.

13.
            if (File.Exists(path))
14.
            {
15.
                yield return path;
16.
                yield break;
17.
            }
18.

19.
            // if input is not reachable do break
20.

21.
            if (!Directory.Exists(path))
22.
            {
23.
                yield break;
24.
            }
25.

26.
            // check if file pattern was given else use default
27.

28.
            if (null == file_pattern)
29.
                file_pattern = "*." + required_extension;
30.

31.
            var top_directory = new DirectoryInfo(path);
32.

33.

34.
            // Enumerate the files just in the top directory.
35.

36.
            IEnumerator<FileInfo> files;
37.
            try
38.
            {
39.
                files = top_directory.EnumerateFiles(file_pattern).GetEnumerator();
40.
            }
41.
            catch (Exception)
42.
            {
43.
                files = null;
44.
            }
45.

46.

47.

48.
            while (true)
49.
            {
50.
                FileInfo file = null;
51.
                try
52.
                {
53.
                    if (files != null && files.MoveNext())
54.
                        file = files.Current;
55.
                    else
56.
                        break;
57.
                }
58.
                catch (UnauthorizedAccessException)
59.
                {
60.
                    continue;
61.
                }
62.
                catch (PathTooLongException)
63.
                {
64.
                    continue;
65.
                }
66.

67.
                yield return file.FullName;
68.
            }
69.

70.
            if (!recurse)
71.
                yield break;
72.

73.
            IEnumerator<DirectoryInfo> dirs;
74.
            try
75.
            {
76.
                dirs = top_directory.EnumerateDirectories("*").GetEnumerator();
77.
            }
78.
            catch (Exception)
79.
            {
80.
                dirs = null;
81.
            }
82.

83.
            while (true)
84.
            {
85.
                DirectoryInfo dir = null;
86.
                try
87.
                {
88.
                    if (dirs != null && dirs.MoveNext())
89.
                    {
90.

91.
                        // filtering dirs who contain string
92.
                        // dir_filter ist ein static public array der in der main class gesetzt wird.
93.
                        // Hier entsteht das Problem <- 
94.
                        // Enthält der Ordner-Name eines dieser Strings in dem Fall Recycle.Bin sollte mit dem nächsten Ordner fortgefahren werden
95.
                        // Mit allen Ordnern die nicht direkt Unterordner von C:\ sind funktioniert das offenbar
96.
                        if (!Program.dir_filter.Any(dirs.Current.FullName.Contains))
97.
                        {
98.
                            // passing dir on to recursive function
99.
                            dir = dirs.Current;
100.
                        }
101.
                        else
102.
                        {
103.
                            break;
104.
                        }
105.
                    }
106.
                    else
107.
                        break;
108.
                }
109.
                catch (UnauthorizedAccessException)
110.
                {
111.
                    continue;
112.
                }
113.
                catch (PathTooLongException)
114.
                {
115.
                    continue;
116.
                }
117.

118.
                foreach (var subpath in FindAccessableFiles(dir.FullName, file_pattern, recurse))
119.
                    yield return subpath;
120.
            }
121.
        }



Dann ist mir aufgefallen: Rufe ich diese Klasse mit dem Pfad C:\, *.*, Rekursiv wahr und einem Filter der in etwa "Recycle.Bin" enthält,
ist der Output davon etwa 3 Zeilen lang. Nehme ich das Recycle raus, sind es eher so 6000 Zeilen.
Da der Ordner $Recycle.Bin sollte eigentlich übersprungen werden, also die Funktion soltle sich nicht selber damit aufrufen sondern mit dem nächsten Ordner fortfahren.
Tut sie aber nicht. Sobald Recycle.Bin gefunden wird, wird die ganze Durchsuchung von C:\ abgebrochen. Warum?

Hilfe wird geschätzt, noch einen schönen Nachmittag

lg clragon
Mitglied: emeriks
20.10.2017 um 16:38 Uhr
Hi,
auf die Schnelle
if (!Program.dir_filter.Any(temp.Contains))
Was soll dieses ".contains" am "temp"?

OK, C# ist jetzt nicht meine Domäne, aber C# nutzt .Net. Und da sieht mir diese Zeile nun mal was fragwürdig aus.

E.
Bitte warten ..
Mitglied: clragon
20.10.2017, aktualisiert um 19:25 Uhr
Das .Contains gibt den bool für das IF-Statement zurück.
Also, If(Wert1(Wert2 enthält?[false/true])

lg clragon
Bitte warten ..
Mitglied: emeriks
20.10.2017 um 19:19 Uhr
OK, danke. Habs gerade nachgestellt. Funktioniert so.
Bitte warten ..
Mitglied: clragon
25.12.2017 um 10:47 Uhr
Beitrag geschlossen, ohne Antwort.

lg clragon
Bitte warten ..
Ähnliche Inhalte
Visual Studio
C Sharp - Runden
gelöst Frage von Cubic83Visual Studio5 Kommentare

Guten Morgen, ich habe ein Problem unter C# bei dem ich den Preis eines Artikels ohne Mehrwertsteuer berechnen muss. ...

C und C++
C sharp basics
Frage von OarmschC und C++1 Kommentar

servus. folgendes Problem kann im Visual Studio mit float keine Gleitkommazahlen darstellen. Erste Dezimalstelle rechts vom punkt wird sofort ...

C und C++
C-sharp Form buggt
gelöst Frage von YanmaiC und C++2 Kommentare

Hallo ihr Administratoren. Ich habe ein kleines Problem. Unszwar möchte ich eine Ordner von C# zu einem PHP Script ...

C und C++
C-sharp SearchPattern (Regex)
Frage von YanmaiC und C++6 Kommentare

Hallo ihr Administratoren, ich verwende ein AUtocpmpletemenu Plugin. Dort habe ich Snippets, die dann sozusagen completed werden. Beim erstellen ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Extended Validation Certificates are (Really, Really) Dead

Information von Dani vor 4 StundenVerschlüsselung & Zertifikate

Moin all, sehr interessanter Artikel zu EV SSL/TLS- Zertifikate von Troy Hunt: Gruß, Dani

Humor (lol)
Das IoT wird schlimmer
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)8 Kommentare

Nun auch schon über den WSUS:

Sicherheit

Win10 1809 und höher erlauben nun das Sperren und Whitelisten von bestimmten Geräten

Tipp von DerWoWusste vor 3 TagenSicherheit1 Kommentar

Vor 1809 konnten nur Geräteklassen gesperrt werden, nun können endlich einzelne Device instance IDs gewhitelistet werden (oder andersherum: gesperrt ...

Windows 10

Hands-On: What is new in the Windows 10 November 2019 Update?

Information von DerWoWusste vor 3 TagenWindows 10

Die wenigen (aber zum Teil interessanten) Neuheiten werden in diesem Video sehr schnell erklärt und vorgeführt.

Heiß diskutierte Inhalte
Mac OS X
Mac Startfehler: Too many corpses created
Frage von winlinMac OS X23 Kommentare

Seit meinem letzten update komme ich nach der Anmeldung nixht mehr weiter. Der Fortschrittsbalken nach der Anmeldung geht bis ...

Netzwerke
Subnetzmaske mit Hilfe der IP-Adresse berechnen
gelöst Frage von Jennifer21Netzwerke22 Kommentare

Hi zusammen, kann mir bitte jemand helfen bei dieser Aufgabe. Ich muss die die Subnetzsmaske berechnen von den IP-Adressen: ...

Exchange Server
Exchange 2016 550 5.7.60 SMTP Client does not have permissions to send
Frage von kermit-elmoExchange Server17 Kommentare

Hallo, ich möchte für bestimmte Mitarbeiter einen IMAP Zugang zum Firmen internen Exchange 2016 bereitstellen. Ein paar verwenden Linux ...

Windows 10
3D PDF bei WIN 10 mit Adobe Acrobat DC öffnen
Frage von DysfunktionWindows 1016 Kommentare

Hallo zusammen, Aus einem Konstruktionsprogramm ( Catia ) kann man Zeichnungen als 3 d PDF exportieren. Diese werden lokal ...