none
C# Datei suchen/finden in übergeordneten Ordner verschieben RRS feed

  • Frage

  • Hallo Freunde,

    ich möchte ein kleines Tool bauen, wo ich nach *.txt und *.xml Dateien suchen kann.

    Das Suchwort kommt in eine Textbox und die Suche wird mit einem Button gestartet. Quellpfad ist ein bestimmter Ordner, der weitere Unterordner beinhaltet. Die gesuchte Datei befindet sich in einen der Unterordnern. Die gefundene Datei soll dann namentlich in einer Textbox angezeigt werden. Falls keine Datei gefunden wurde, dann ein Infotext: Kein Ergebnis. 

    Das Verschieben der Datei soll so vorangehen, dass sie beim Klick auf Verschieben, nur ein Ordner zurückgegangen wird.

    Bsp: Datei befindet sich in C:\Testorder\Ordner1\ -> C:\Testorder\. Diese Info soll dann in der Infobox angezeigt werden, dass die Datei verschoben wurde.

    Bitte um Hilfe.

    Mittwoch, 15. März 2017 08:09

Antworten

  • Hi,

    den ganzen Code wird dir hier keiner schreiben.

    Um einen Filter im OpenFileDialog anzugeben, schau mal hier:

      FileDialog.Filter-Eigenschaft

    <OpenFileDialog>.Filter = "TXT Dateien (*.txt)|*.txt|XML Dateien (*.xml)|*.xml"

    Und da ich übersehen habe, dass Du mit C# arbeitest, hier noch die C# Variante:

    <OpenFileDialog>.Filter = "TXT Dateien (*.txt)|*.txt|XML Dateien (*.xml)|*.xml";

    Falls Du nicht eine Datei auswählen willst, sondern in einem Ordner (ggfs. mit allen Unterordnern) nach bestimmten Dateitypen suchen willst, wäre

      Directory.GetFiles

    das, was Du suchst. Da man beim direkten Aufruf der Methode nur einen Filter (bspw. "*.txt") angeben kann, bietet sich evtl. sowas an, um nach mehreren Filtern gleichzeitig zu suchen:

    Dim Files  = Directory.EnumerateFiles( "X:\Temp", "*.*", SearchOption.AllDirectories ).Where( Function( Check ) Check.ToLower().EndsWith( ".txt" ) OrElse Check.ToLower().EndsWith( ".xml" ) )

    Auch hier die C# Variante:

    var files  = Directory.EnumerateFiles( @"X:\Temp", "*.*", SearchOption.AllDirectories ).Where( f => f.ToLower().EndsWith( ".txt" ) || f.ToLower().EndsWith( ".xml" ) );

    Dabei gibt es aber u.U. Berechtigungsprobleme, da bspw. auch Ordner wie "System Volume Information" durchsucht werden, was aber in der Regel aufgrund fehlender Berechtigungen fehlschlägt.

    Die klassische Methode wäre dann bspw. sowas hier:

    Dim Files As List( Of String ) = Directory.GetFiles( "X:\Temp", "*.txt" ).ToList()
        Files.AddRange( Directory.GetFiles( "X:\Temp", "*.xml" ).ToList() )

    In C#

    List<String> files = Directory.GetFiles( @"X:\Temp", "*.txt" ).ToList();
        files.AddRange( Directory.GetFiles( @"X:\Temp", "*.xml" ).ToList() );

    Das übergeordnete Verzeichnis kannst du bspw. so ermitteln:

    Directory.GetParent-Methode: (String)


    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





    Mittwoch, 15. März 2017 08:43
    Moderator

Alle Antworten

  • Bis auf das durchsuchen der Unterordner hast du ja schon alles in dem anderen Thread.

    Wie du das durchsuchen machst findest du hier.

    Rekursives Durchsuchen von Verzeichnissen mit Visual C#

    ps.

    Ich denke wenn du es googlest bist du schneller als wenn du hier im Forum auf eine Antwort wartest.

    Mittwoch, 15. März 2017 08:37
  • Hi,

    den ganzen Code wird dir hier keiner schreiben.

    Um einen Filter im OpenFileDialog anzugeben, schau mal hier:

      FileDialog.Filter-Eigenschaft

    <OpenFileDialog>.Filter = "TXT Dateien (*.txt)|*.txt|XML Dateien (*.xml)|*.xml"

    Und da ich übersehen habe, dass Du mit C# arbeitest, hier noch die C# Variante:

    <OpenFileDialog>.Filter = "TXT Dateien (*.txt)|*.txt|XML Dateien (*.xml)|*.xml";

    Falls Du nicht eine Datei auswählen willst, sondern in einem Ordner (ggfs. mit allen Unterordnern) nach bestimmten Dateitypen suchen willst, wäre

      Directory.GetFiles

    das, was Du suchst. Da man beim direkten Aufruf der Methode nur einen Filter (bspw. "*.txt") angeben kann, bietet sich evtl. sowas an, um nach mehreren Filtern gleichzeitig zu suchen:

    Dim Files  = Directory.EnumerateFiles( "X:\Temp", "*.*", SearchOption.AllDirectories ).Where( Function( Check ) Check.ToLower().EndsWith( ".txt" ) OrElse Check.ToLower().EndsWith( ".xml" ) )

    Auch hier die C# Variante:

    var files  = Directory.EnumerateFiles( @"X:\Temp", "*.*", SearchOption.AllDirectories ).Where( f => f.ToLower().EndsWith( ".txt" ) || f.ToLower().EndsWith( ".xml" ) );

    Dabei gibt es aber u.U. Berechtigungsprobleme, da bspw. auch Ordner wie "System Volume Information" durchsucht werden, was aber in der Regel aufgrund fehlender Berechtigungen fehlschlägt.

    Die klassische Methode wäre dann bspw. sowas hier:

    Dim Files As List( Of String ) = Directory.GetFiles( "X:\Temp", "*.txt" ).ToList()
        Files.AddRange( Directory.GetFiles( "X:\Temp", "*.xml" ).ToList() )

    In C#

    List<String> files = Directory.GetFiles( @"X:\Temp", "*.txt" ).ToList();
        files.AddRange( Directory.GetFiles( @"X:\Temp", "*.xml" ).ToList() );

    Das übergeordnete Verzeichnis kannst du bspw. so ermitteln:

    Directory.GetParent-Methode: (String)


    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





    Mittwoch, 15. März 2017 08:43
    Moderator
  • Hallo Palin,

    nur aus Interesse:

    Directory.GetFiles kennt seit .NET 2.0 eine Überladung, bei der man angeben kann, ob nur das angegebene Verzeichnis oder dieses und alle Unterverzeichnisse durchsucht werden sollen.

    Hat es einen speziellen Grund, warum Du die manuelle Variante bevorzugst?


    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

    Mittwoch, 15. März 2017 08:50
    Moderator
  • 1. google Treffer ;)
    Mittwoch, 15. März 2017 08:54
  • 1. google Treffer ;)

    Ok. Aber so wirklich zielführend ist das nicht, wenn das, was da steht, doch extrem veraltet ist.


    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

    Mittwoch, 15. März 2017 08:55
    Moderator