Autor Beitrag
Metrik
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Mo 11.12.06 19:54 
Hallo
Ich bin gerade dabei ein Tool zu schreiben, dass einem den computer von Müll entfernt :D

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    class Cleaner
    {
        static void Main(string[] args)
        {
            delFiles();
        }
        public static void delFiles()
        {
            string path = @"c:\";
            string searchpattern = "*.tmp";

            string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);

            foreach (string directory in directories)
            {
                File.Delete(directory);
                Console.WriteLine("Deleting {0}",directory);
            }
        }
    }


Das funktioniert eigentlich auch ganz nett, nur wenn ich auf ein Verzeichnis keinen Zugriff habe, geht gar nichts.

Wenn ich das ganz mit try abfange:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
    class Cleaner
    {
        static void Main(string[] args)
        {
            delFiles();
            Console.ReadLine();
        }
        public static void delFiles()
        {
            try
            {
                string path = @"c:\";
                string searchpattern = "*.tmp";

                string[] directories = Directory.GetFiles(path, searchpattern, SearchOption.AllDirectories);

                foreach (string directory in directories)
                {
                    File.Delete(directory);
                    Console.WriteLine("Deleting {0}", directory);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
        }
    }


Das Problem ist hier, wenn er einen Fehler finden (Zugriff verweigert auf ....) dann macht er nicht mehr weiter, sonder bleibt in der Exception stecken. Gibts nicht ne möglichkeit, damit er dieses Verzeichnis einfach überspringt?

Könnt ihr mir sagen wir ich das lösen kann ?

Metrik
DareDevil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70

Windows7
C# (VS 2010)
BeitragVerfasst: Mo 11.12.06 23:35 
Du musst das try catch anders setzen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
class Cleaner
{
    static void Main(string[] args)
    {
        delFiles();
    }
    public static void delFiles()
    {
        try
        {
            string path = @"c:\";
            string searchpattern = "*.tmp";
            string[] directories =   Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);
            foreach (string directory in directories)
            {
                File.Delete(directory);
                Console.WriteLine("Deleting {0}",directory);
            }
        }
        catch
        {
            Console.WriteLine(exception.Message);
        }
}


Der fehler tritt ja bei dem "File.Delete()" auf dann müsste der Quelletext so aussehen.
Da das try die ganze Anweisung umschließt sammt der Schleife wird die Schleife abgebrochen wenn "File.Delete()" nicht ausgeführt werden kann damit in das catch gesprungen werden kann.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
class Cleaner
{
    static void Main(string[] args)
    {
        delFiles();
    }
    public static void delFiles()
    {
        string path = @"c:\";
        string searchpattern = "*.tmp";
        string[] directories =   Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);
        foreach (string directory in directories)
        {
            try
            {
                <span style="color: red">File.Delete(directory);</span>
                Console.WriteLine("Deleting {0}",directory);
            }
            catch
            {
                Console.WriteLine(exception.Message);
            }
        }
    }
}


Greez

Pascal
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Mi 13.12.06 17:22 
Hallo
Danke, hätte ich eigentlich selber draufkommen können :autsch:

Zitat:
try
{
File.Delete(directory);
Console.WriteLine("Deleting {0}",directory);
}
catch
{
Console.WriteLine(exception.Message);
}


Was machst du genau mit der Zeile File.Delete(directory); ?
Das mit den Farben ist mir nicht ganz klar. Hab das auch ausprobiert, hat bei mit nicht gefunzt :(

Metrik
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Mi 13.12.06 17:25 
Hmm, hab das jetzt nochmal ausprobiert ...

Der Fehler wird in der zeile

ausblenden C#-Quelltext
1:
2:
 string[] directories =   Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);
        foreach (string directory in directories)


erzeugt.

Was soll ich jetzt machen ?
Metrik
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 13.12.06 18:59 
user profile iconMetrik hat folgendes geschrieben:
Danke, hätte ich eigentlich selber draufkommen können :autsch:
dann solltest du doch nun ebenfalls selbst herausfinden können, wo ein weiterer Catch-Block eingefügt werden muss.
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Fr 15.12.06 19:25 
Hallo

Irgendwie hat mir bis jetzt noch keiner so richtig helfen könnnen ....

Geht mal von vollgendem source aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
    class Cleaner
    {
        static void Main(string[] args)
        {
            delFiles();
        }
        public static void delFiles()
        {
            string path = @"c:\";
            string searchpattern = "*.tmp";
            string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);
            foreach (string directory in directories)
            {
                File.Delete(directory);
                Console.WriteLine("Deleting {0}",directory);
            }
        }
    }


Jetzt mal die Testsituation, dass der ausführende Benutzer auf das Verzeichnis c:\test keinerlei Rechte hat.

Dann geht nämlich gar nichts :(
Kann mir wer eine Lösung zeigen, die dieses Problem löst? vielleicht ist auch mein Ansatz falsch zum das Problem zu lösen. Jeder Tipp willkommen.

Metrik
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 15.12.06 19:32 
Laut Doku wirft File.Delete doch eine UnauthorizedAccessException, wenn es nicht geht. Die kannst doch abfangen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Sa 16.12.06 18:56 
Hallo

Hat mir nicht wirklich geholfen... Ich verstehe das selber nicht, warum dass das auf keine Weise geht. Könnte nicht einer, einfach schnell den sourcecode kopieren und das bei sich ausporbieren ?

Aus meiner Sicher entsteht der Fehler nicht bei der Zeile
ausblenden C#-Quelltext
1:
File.Delete(directory);					


sondern hier bei SearchOption.AllDirectories
ausblenden C#-Quelltext
1:
string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);					


Wäre euch dankbar, wenn ihr mir helfen könntet

MEtrik
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: Sa 16.12.06 19:05 
Ich muss hier vielleicht noch anfügen, ich kann zwar den error abfangen, damit nicht alles abstürtz, aber dann sucht der nicht weiter nach Verzeichnissen.
Der soll aber alle durchsuchen, die er lesen darf.

MEtrik
Metrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 80

Win XP, Win Vista
C# (VS 2003, #Develop)
BeitragVerfasst: So 17.12.06 10:40 
Hallo
Gibt es nicht eine Möglichkeit, um dem Programm zu sagen, dass es einfach dieses Verzeichnis überstpringen und weiterfahren soll ?


Metrik