Benutzer mit den meisten Antworten
C# Datei suchen/finden in übergeordneten Ordner verschieben

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.
- Verschoben Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 28. März 2017 08:39 Die Frage ist nicht auf die Community-Edition beschränkt; verschoben aus: Visual Studio Community
Antworten
-
Hi,
den ganzen Code wird dir hier keiner schreiben.
Um einen Filter im OpenFileDialog anzugeben, schau mal hier:
<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
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
- Bearbeitet Stefan FalzModerator Mittwoch, 15. März 2017 14:01
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 28. März 2017 08:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 5. April 2017 11:35
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.
-
Hi,
den ganzen Code wird dir hier keiner schreiben.
Um einen Filter im OpenFileDialog anzugeben, schau mal hier:
<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
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
- Bearbeitet Stefan FalzModerator Mittwoch, 15. März 2017 14:01
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 28. März 2017 08:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 5. April 2017 11:35
-
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 -
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