Suchprogramm

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Suchprogramm

    Guten Abend,

    Vorgeschichte

    ich steh vor einem großen Fragezeichen. Ich wollte eine Pause einlegen, vom vielen Programmieren mit Datenbanken und mich
    in der Zeit mit systembasierenten Codes zu beschäftigen.

    systembasierent?

    Mit "systembasierenten Codes" meine ich keine Webserver, Datenbanken usw. Sondern mein eigenes System (Windows 7,32-Bit).
    Ein anderer Begriff ist mir leider nicht eingefallen, deshalb versuche ich meine Idee bestmöglichst darzustellen.

    Meine Idee

    Ich dachte mir, dass eine Windows Suchfunktion, wie es wahrscheinlich jedem bekannt ist, die beste Programmierübung für den Anfang wäre.
    Und so begann ich zu forschen. Nur fehlte mir ein guter Begriff um meine passende Antworten zu bekommen. Währenddessen kam
    ich auf die Idee File.Exists (System.IO) zu probieren und gelang zu einem Ergebnis.

    Quellcode

    1. private void button1_Click(object sender, RoutedEventArgs e)
    2. {
    3. String input = textBox1.Text;
    4. if (String.IsNullOrEmpty(input))
    5. {
    6. MessageBox.Show("Bitte füllen Sie erst Ihre Felder aus!",
    7. "Warning",
    8. MessageBoxButton.OK,
    9. MessageBoxImage.Error,
    10. MessageBoxResult.None);
    11. }
    12. else
    13. {
    14. String curInput = "C:\\Users\\Computername\\Desktop\\" + input + ".txt";
    15. if(File.Exists(curInput))
    16. {
    17. MessageBox.Show("Datei existiert",
    18. "Hinweis",
    19. MessageBoxButton.OK,
    20. MessageBoxImage.Exclamation,
    21. MessageBoxResult.None);
    22. }
    23. else
    24. {
    25. MessageBox.Show("Datei wurde nicht gefunden!",
    26. "Hinweis",
    27. MessageBoxButton.OK,
    28. MessageBoxImage.Exclamation,
    29. MessageBoxResult.None);
    30. }
    Alles anzeigen


    Beachtet jetzt nicht wirklich den Code bitte. Er soll nur meine Denkweise wiederspiegeln. Ich habe ihn schnell hingeschrieben um es zu Testen!
    Erfolg hatte ich, nur nicht den Erfolg, den ich mir erträumt habe. ;) Ich möchte kein Direktverzeichnis (s.Code) Desktop sondern allgemeine meine Partition C:\\.

    Kurzgefasst: Das Programm soll meine Festplatte nach der String-Eingabe durchforsten.

    Fragen:

    Habt ihr irgendwelche Ideen? Begriffe? (Aber keine fertigen Codes. Möchte es selbst schaffen!)
    Schafft man das überhaupt mit File.Exists und System.IO? Oder gibt es ein anderen Namespace?
    Oder ist es gar ein zu großer Aufwand, den ich nicht alleine bewältigen kann und daran zerbreche?
  • Danke dir, Nippel.

    Du hast mich vielleicht schon ein Stückchen weitergebracht.

    Sowas suche ich, aber ich dachte vielleicht gibt es ja schon eine Bibliothek oder eine Methode die C:// automatisch durchsucht. Aber vielleicht
    muss ich die Methode selbst schreiben mit einer Art NextDirection oder so. Darf ja nicht so schwer sein? lach

    If-Abfrage, vielleicht 1 Schleife mit einem Ausstieg sobald die Datei gefunden wurde oder?

    Mit freundlichen Grüßen

    Sheldon
  • Nun ja ich teile nur mein Allgemeinwissen mit. Ich hab leider keine Erfahrung in C++/C/.NET oder was das auch sein soll hehe ;)
    Könntest mir es aber gerne sagen, da der Source für mich ziemlich verständlich ist.

    Hmm soweit ich das noch weiss sollte da statt IF- eine FOR-Schleife hin. (Für die Ordnerfilterung.)

    Ob es vorhandene Methoden oä gibt kann ich dir nicht sagen, s.o.

    Dennoch würde ich das ganze in bestimmte Parts aufteilen.
    Ich meine wieso sollte man in C:/Windows/Fonts wonach suchen ;)?
    Also eher eine "blacklist" für bestimme Ordner.

    Zudem sind mir Sachen aufgefallen wie zB.
    - Es gibt mehrere Dateien mit dem Namen
    - Der Name, nach deinem Source nach, muss IDENTISCH sein => kein Spielraum alá like('%name%')

    Zu deinem letzten Satz in deinem ersten Beitrag kann ich nur sagen - es ist Quatsch, dass du es alleine nicht schafst!
    Ich meine es ist jetzt keine zu sehr komplexe Funktion.

    Bisschen Wirr Warr, aber es waren meine 5 Cent da mir der Source gefallen hat und ich mich vll auch darin einarbeiten will. ;)
  • Kein Problem, werde dich auf den Laufenden halten.

    Ja klar, mein Programm soll nach der Eingabe des Benutzers suchen und das Ergebnis dann auflisten.
    Man könnte mit Checkboxen bestimmte Ordner auslassen und mit einer List-Option die Dateiendung auswählen.
    Aber fürs Erste, ist mir das zu kompliziert. Möchte nur erstmal mein Suchergebnis haben ^^.

    Wenn man Code steht, poste ich ihn hier rein. Es wird bestimmt einige Sachen geben, die verbessert werden muss.

    Ps: Wenn du dich einarbeiten willst, kann ich dir ruhig helfen. Im Team macht es mir mehr Spaß.

    Mit freundlichen Grüßen

    Sheldon
  • Also naja... Wenn es direkt ne Methode gäbe, die C: komplett durchsucht, wozu müsstest du dann noch ein Suchprogramm schreiben?

    Dafür dass du es selbst schaffen willst, kann ich jetzt nicht erkennen, dass du dir großartig Gedanken gemacht hast wie das funktionieren soll, was für Klassen/Methoden oder sonstiges du gebrauchen könntest und wo man so was findet.

    Aber um mal ein paar Hinweise zu geben: Das meiste was du für dein Vorhaben brauchst findet sich im System.IO Namespace. Insbesondere "Directory" könnte dir helfen. Wenn du objektorientiert arbeiten willst können auch die Klassen FileInfo und DirectoryInfo hilfreich sein (statt den Klassen ohne das "Info")

    Solche hierarchischen Suchalgorithmen sind übrigens "schöner" wenn man sie rekursiv implementiert. Es dürfte aber auch iterativ gehen, falls du dich mit Rekursion noch nicht beschäftigt hast.

    Wenn dich die Theorie hinter dem ganzen Interessiert, kannst du mal nach dem Thema Bäume (in der Informatik, nicht die grünen Dinger im Wald :D) suchen, denn nichts anderes ist das Dateisystem. Du suchst quasi eine Durchlaufstrategie durch den Baum.
  • Danke dir, Rondrer, aber du tust mir schon etwas Unrecht.

    Woher willst du wissen, wie ich mich mit dem Thema beschäftige. Den Code im ersten Post ist dahingeschrieben ohne jegliche Überlegung. Da hast du natürlich Recht.
    Steht aber auch in meinem ersten Post drin!

    Genauso kam ich schon davor auf die Idee einfach mal in die msdn Liberty von System.IO zu schauen und bin dabei schon längst auf Directory gestoßen!

    Trotzdem vielen Dank.

    Werd euch auf den laufenenden halten!

    Mit freundlichen Grüßen

    Sheldon
  • Guten Tag,

    Ich hatte die letzten 2 Tage Zeit mich meinen Programm zu widmen. Aber leider ohne Erfolg!
    Deshalb postet ich mal meinen bisherigen Code. Siehe auch Kommentar im Code!

    Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Windows;
    6. using System.Windows.Controls;
    7. using System.Windows.Data;
    8. using System.Windows.Documents;
    9. using System.Windows.Input;
    10. using System.Windows.Media;
    11. using System.Windows.Media.Imaging;
    12. using System.Windows.Navigation;
    13. using System.Windows.Shapes;
    14. // selbst hinzugefügte Namespaces...
    15. using System.IO; // Input, Output
    16. using System.Collections; // für Array-List
    17. namespace WpfApplication1
    18. {
    19. /// <summary>
    20. /// Interaktionslogik für MainWindow.xaml
    21. /// </summary>
    22. public partial class MainWindow : Window
    23. {
    24. public MainWindow()
    25. {
    26. InitializeComponent();
    27. }
    28. private void Button_Click(object sender, RoutedEventArgs e)
    29. {
    30. // Überprüfen ob Feld leer ist..
    31. try
    32. {
    33. String submission = submissionTextBox.Text;
    34. if (String.IsNullOrEmpty(submission))
    35. {
    36. // Label-Warnung erscheint...
    37. labelWarning.Content = "Bitte füllen Sie zu erst die Felder aus!";
    38. }
    39. else
    40. {
    41. // Stammverzeichnis suchen...vorher überprüfen ob vorhanden...
    42. String path = @"C:\";
    43. if (Directory.Exists(path))
    44. {
    45. /*
    46. *
    47. * Ich habe hier schon alles ausprobiert. Denke ich jedenfalls.
    48. * angefangen von Directory.GetDirectories(root, submission, searchOption.AllDirectories...)
    49. * ->UnauthorizedExeption. Also keine Befugnis auf manche Verzeichnisse (Hardlinks, Softlinks)
    50. * Also gegooglt und nach irgendwelchen Permissionslösung gesucht. -> Ohne Erfolg.
    51. *
    52. * Dann fing ich an es manuell zu versuchen. Sprich, wenn Verzeichnis besteht, dann
    53. * eine Auflistung des Verzeichnis (path) in einem Array speichern. Und dann per
    54. * ArrayBinarySearch nach der jeweiligen Eingabe (submission) im Array suchen und
    55. * als String zurück geben.
    56. *
    57. * Versuch 3 war fast das gleiche Prinzip wie Versuch 2, nur den Array in einem String
    58. * konvertieren und per IndexOf() nach der jeweiligen Eingabe (submission) im String suchen.
    59. * Geprüft ob vorhanden durch if-Abfrage und der zurückgelieferten Index.
    60. * Hat auch geklappt nur muss ich nun jedesmal das Stammverzeichnis mit in die Eingabe
    61. * eingeben. Was für mich nicht der Sinn der Sache ist.
    62. *
    63. * Den letzten Versuch startete ich mit Klasse Directory Info. Mit Directory habe
    64. * ich es geschafft nur den Verzeichnisnamen zu bekommen ohne Extansion oder Stammverzeichnis.
    65. * Wie ich es wollte. Haken war aber, dass es mir nur einen einzigen Ordner zurückgibt.
    66. * Den letzten im Verzeichnis.
    67. *
    68. * Aber nun Streiken meine Kenntnisse und leider mein Verständnis.
    69. *
    70. */
    71. }
    72. else
    73. {
    74. labelWarning.Content = "Das von Ihnen ausgewählte Stammverzeichnis existiert nicht.";
    75. }
    76. }
    77. }
    78. catch (Exception failure)
    79. {
    80. // Stellt Fehler dar...
    81. labelWarning.Content = failure.Message;
    82. }
    83. }
    84. }
    85. }
    Alles anzeigen
  • Es wird immer Verzichnisse geben, an die du nicht ran kannst. Der Clou ist nicht einen weg zu finden, da trotzdem reinzukommen, sondern den Fehler behandeln und im nächsten Ordner weiterzusuchen. Besonders klug wäre dein Programm, das C: komplett durchsucht und dann indiziert und nachher nur noch im Index sucht.

    Das durchsuchen von Verzeichnissen kannst du mit einer Schleife und Rekursion lösen.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • SeBa schrieb:

    Es wird immer Verzichnisse geben, an die du nicht ran kannst. Der Clou ist nicht einen weg zu finden, da trotzdem reinzukommen, sondern den Fehler behandeln und im nächsten Ordner weiterzusuchen. Besonders klug wäre dein Programm, das C: komplett durchsucht und dann indiziert und nachher nur noch im Index sucht.

    Das durchsuchen von Verzeichnissen kannst du mit einer Schleife und Rekursion lösen.


    Gerade gesehen, dass ich mich noch nicht bedankt habe.
    Du hast mir zwar ein kleines Leuchten in meiner oberen Denkglühbirne funken lassen.
    Aber ich hab das Projekt erstmal auf Eis gelegt. Ist glaub ich noch zu hoch und verursacht dadurch Demotivation. :(