none
Zugriff verweigert RRS feed

  • Frage

  • Hi guys,

    folgendes Programm soll alle Access-Datenbanken auf einer beliebigen Festplatte ermitteln, um dieselbigen dann -zunächst- anzuzeigen.

    Problem dabei ist, dass ich immer mit der Exceptionnachricht " Zugriff auf den Pfad.....wurde verweigert".

    Ob ich VS als Administrator ausführe,oder nicht ist völlig belanglos.

    Die Eception bleibt.

    Was verschafft Abhilfe??

    using System;
    using System.IO;
    using System.Linq;
    
    namespace Rekursive_Suche
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    string[] Acess_Databases = (from f in Directory.GetFiles(@"E:\", "*", SearchOption.AllDirectories)
                                                where f.EndsWith(".mdb")
                                                select f).ToArray();
                    foreach (string element in Acess_Databases)
                    {
                        Console.WriteLine(element);
                    }
                }catch(Exception ex) { Console.WriteLine(ex.Message); }
                Console.ReadLine();
            }
        }
    }

    Dienstag, 18. April 2017 07:00

Antworten

Alle Antworten

  • Hi,

    Du musst hier rekursiv manuell durch alle Verzeichnisse und Unterverzeichnisse laufen und die Dateien selbst ermitteln.

    Ein paar Beispiele findest Du hier:

      How to: Iterate Through a Directory Tree (C# Programming Guide)

      Ignore UnauthorizedAccessException on Directory.GetFiles


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 18. April 2017 07:29
    Moderator
  • Hallo tklenin,

    das ist jetzt zwar keine Antwort auf die eigentliche Frage, aber ich möchte auf eine Alternative hinweisen.

    Statt das zu tun was Window Search eh macht, kannst Du den vorhanden Index abfragen und/oder diesen via Windows Search SDK nutzen. Könnte die Laufzeit des Programms verbessern.

    Zugriffsmöglichkeiten auf den Index: Querying the Index Programmatically

    Zugriff mittels SQL und AQS auf den Index: Using SQL and AQS Approaches to Query the Index

    Weitere Links mit ergänzenden Infos zum SDK finden sich unter den beiden vorgenannten.

    Vielleicht weiß noch jemand etwas zu Vor-/Nachteilen zu sagen.


    - Gruß Florian

    Dienstag, 18. April 2017 08:20
  • Hallo,

    irgend etwas wird wohl auf E: liegen, auf das auch Admins zunächst keine Berechtigungen haben. Spontan tippe ich mal auf einen System-Ordner wie den Papierkorb oder auf Überreste eines Setups. Daher kommt es auch als Admin zu der Exception.

    Abhilfe wurde dir bereits von Stefan und Florian genannt.

    Noch allgemein zu GetFiles: Anstatt nachher mit where auf .mdb-Dateien zu filtern, was deutlich aufwendiger ist (und auch nicht funktioniert, da du die Groß- und Kleinschreibung nicht ignorierst), kannst du auch den Filter anpassen.

    Directory.GetFiles(@"E:\", "*.mdb", SearchOption.AllDirectories)

    Die Exception würde das aber trotzdem nicht beheben.

    Allgemein empfehle ich dir aber das mit dem Durchsuchen aller Ordner nochmal zu überdenken. Bei meinem Haupt-Rechner würde die Suche Tage dauern, wenn nicht alles indiziert wäre. Spezielle Ordner (Eigene Dateien etc.) zu durchsuchen kann dagegen vielleicht ganz praktisch sein. System-Verzeichnisse dagegen dürften dir nichts bringen.


    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    • Als Antwort markiert tklustig Dienstag, 18. April 2017 18:49
    Dienstag, 18. April 2017 15:03
    Moderator
  • Habe das jetzt versucht, so zu lösen,allerdings passiert nix. Nur wenn ich den absoluten Pfad wähle,wird die Datei abgespielt. woran liegt denn das?

            private void LoginForm_Load(object sender, EventArgs e)
            {
                textBox1.Visible = false;
                DirectoryInfo dir_info = new DirectoryInfo(@"C:\Users\tklustig\");
                List<string> file_list = new List<string>();
                SearchDirectory(dir_info, file_list);
            }

            private void SearchDirectory(DirectoryInfo dir_info, List<string> file_list)
            {

                try
                {
                    foreach (DirectoryInfo subdir_info in dir_info.GetDirectories())
                    {
                        SearchDirectory(subdir_info, file_list);
                    }

                        foreach (FileInfo file in dir_info.GetFiles())
                        {
                            if (file.ToString() == "menu.wav")
                            {
                            MessageBox.Show(file.FullName);
                            System.Media.SoundPlayer player = new System.Media.SoundPlayer();
                            player.SoundLocation = file.FullName;
                                player.Load();
                                player.Play();
                            }                    
                        }
                } catch (Exception) { }
    }






    • Als Antwort markiert tklustig Dienstag, 18. April 2017 20:20
    • Bearbeitet tklustig Dienstag, 18. April 2017 20:25
    • Tag als Antwort aufgehoben tklustig Mittwoch, 19. April 2017 12:13
    Dienstag, 18. April 2017 19:49
  • Hallo,

    woher soll die SoundPlayer-Klasse auch wissen welche Datei du meinst, wenn du nur ihren Namen ohne Pfad angibst?

    Anstelle vom nicht leicht verständlichen FileInfo.ToString() solltest du besser die passend benannten Eigenschaften Name und FullName verwenden. Name gibt dir nur den Dateinamen zurück und FullName den Pfad und den Dateinamen.


    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    • Als Antwort markiert tklustig Mittwoch, 19. April 2017 12:13
    Dienstag, 18. April 2017 20:07
    Moderator
  • Heureka.

    dein Tipp war Gold wert!

    Jetzt kann der User meine Anwendung starten, wo immer er will, die Datei wird gefunden.

    Und die Exception spielt auch keine Rolle mehr, da ich sie ja abfange.

    Thx a lot!!

    Dienstag, 18. April 2017 20:22