titan999 Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Hallo, ich bin gerade dabei ein kleines Tool zu erstellen. Da ich aber noch ziemlcher Anfänger bei .NET bin komme ich einfach nicht weiter, bzw mir fehlt schon der Ansatz. Ich habe in einem Ordner verschiedene Dateitypen. Unter anderem viele INI-Dateien. Ich brauche jetzt eine Möglichkeit, alle ini-Datien (und nur die ini-Dateien) nach einem Wert zu durchsuchen. Bei einem Treffer soll er mir in eine Textbox den Namen der INI-Datei, die Sektion (das was in den eckigen klammern steht) und den Schlüssen (das vor dem "=") hineinschreiben. Wie mache ich sowas? Hat da jemand eine Idee wie ich an sowas ran gehen könnte? Zitieren
_Pete Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Ich würde es für Stream lösen, weiß nicht ob das die beste Methoden ist, aber es geht aufjedenfall. string path = "C:\\Datei"; Pfad der Datei byte suchpara = Convert.ToByte("Parameter"); Convertiert deinen Parameter in Byte int paralänge = 10; Die Länge deines Parameters byte[] arrRead = new byte[paralänge]; Erstellt ein byte-Array mit der größe der länge deines Parameters FileStream ini_search = new FileStream(path, FileMode.Open); Öffnet deine Datei als Stream long search = ini_search.Seek(0, SeekOrigin.Begin); Sucht in dem Stream nach deinem Parameter ini_search.Read(arrRead, Convert.ToInt32(search), paralänge); Liest den Parameter und schreibt in in das Array Read Somit hast du eine Datei nach deinem Parameter durchsucht und in das Byte-Array geschrieben, das musst du nur noch mit einer For schleife ausgeben, eine prüfung noch ein bauen ob das element überhaupt enthalten ist und das dann auf alle dateien übertragen(zb mit einer weiteren schleife) Ist nicht der eleganteste Ansatz aber ich bin auch nicht der Gutu in .NET Zitieren
_Pete Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Halt nein ich wiederrufe! Du suchst ja nach Strings :-/ ich bin von Byte-Dateien ausgegangen, da wird das so nicht gehen Zitieren
2K1.INC Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 (bearbeitet) Hallo, ich bin gerade dabei ein kleines Tool zu erstellen. Da ich aber noch ziemlcher Anfänger bei .NET bin komme ich einfach nicht weiter, bzw mir fehlt schon der Ansatz. Ich habe in einem Ordner verschiedene Dateitypen. Unter anderem viele INI-Dateien. Ich brauche jetzt eine Möglichkeit, alle ini-Datien (und nur die ini-Dateien) nach einem Wert zu durchsuchen. Bei einem Treffer soll er mir in eine Textbox den Namen der INI-Datei, die Sektion (das was in den eckigen klammern steht) und den Schlüssen (das vor dem "=") hineinschreiben. Wie mache ich sowas? Hat da jemand eine Idee wie ich an sowas ran gehen könnte? Mit Directory.GetFiles() die 1/2 Überladung (ansichtssache ob 1 oder 2) bekommst du alle Files in einem String[] aus dem angegebenen Pfad und mit dem Suchmuster Suchoption kannst auch noch einstellen aber bei der 2/3 Überladung Um Dateien zu lesen brauchst du nen Stream... z.B. StreamReader.ReadToEnd() ließt die ganze Datei... String.IndexOF("Text") gibt dir den Index vom vorkommen Den namen der Datei die du grad durchsuchst könntest du dir irgend wo zwischenspeichern falls du es mit for machst dann einfach übern index i zugreifen um den Datienamen zu bekommen mit dem prinzip kannst du das letzte was du wolltest auch lösen... für leute die nach mir posten... bla bla bla ich weis man kanns auch in nem ca.5zeiler mit linq machen aber was bringt ihm das wenn er die lösung hat und nix checkt mit linq ? (LINQ IST JETZT NUR EIN BEISPIEL BEVOR EINER WIDER MIT WAS ANDREM DAHER KOMMT UND MICH VOLL LABBERT.... sehr üblich hier -.- ) Bearbeitet 26. Oktober 2010 von 2K1.INC Zitieren
Guybrush Threepwood Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 für leute die nach mir posten... bla bla bla ich weis man kanns auch in nem ca.5zeiler mit linq machen aber was bringt ihm das wenn er die lösung hat und nix checkt mit linq ? (LINQ IST JETZT NUR EIN BEISPIEL BEVOR EINER WIDER MIT WAS ANDREM DAHER KOMMT UND MICH VOLL LABBERT.... sehr üblich hier -.- ) Ob und was für Lösungsvorschläge andere Leute hier machen hast du ganz sicher nicht zu entscheiden und vorallem solltest du andere nicht bezichtigen rumzulabern. Zitieren
_Pete Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 So, da ich vorhin mist verzapft hab will ich es hier wieder gut machen, hab hier mal was kleines geschrieben, mit dem du die InI-Datei durchsuchen kannst: string strValue = "Parameter"; //Dein Suchparameter StreamReader sr = new StreamReader(@"Pfad"); //Erstellt einen Streamreader auf deine Datei string strLine = string.Empty; //Initialisiert strLine(Suchergebnis) bool bFound = false; //Initilalisiert die Abfrage ob gefunden while (sr.Peek() >= 0 && bFound == false) //Sucht in der Datei solang bis das Ende der Datei erreicht ist ein Fund vorliegt { strLine = sr.ReadLine(); //Damit liest er die Datei Zeile für Zeile in strLine if (strLine.IndexOf(strValue) > 0) //Prüft ob in der Zeile dein gesuchter Parameter enthalten ist { bFound = true; //Wenn Parameter enthalten, Fund wir auf wahr gesetzt } } sr.Close(); //Schließt die Datei wieder if (true == bFound) //Wenn er fündig geworden ist dann { Console.WriteLine(strLine); //Gibt er die Zeile aus } Les dich aber lieber erstmal weiter in das ganze ein, da es viele Fehler geben kann wenn du versuchst dateien zu öffnen die es nicht mehr gibt, fehlerhaft sind oder oder oder ;-) da muss man aufpassen Zitieren
2K1.INC Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 (bearbeitet) Ob und was für Lösungsvorschläge andere Leute hier machen hast du ganz sicher nicht zu entscheiden und vorallem solltest du andere nicht bezichtigen rumzulabern. sry aber es ist so in dem board... einer stellt ne frage alle geben ihm die lösung aber lassn ihn selber ned mal überlegen ne einfach hier haste mach was draus aber lernen tun die wenigsten davon und gibt immer welche die sagen ginge auch leichter, mag sein leichter und komplexer vom aufbau oder willst mir sagen er würd gleich ein Linq statement verstehen ? Das ist aber nicht das Thema... Bearbeitet 26. Oktober 2010 von 2K1.INC Zitieren
Klotzkopp Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Das ist aber nicht das Thema...Du hast es doch erst zum Thema gemacht. Wenn du nicht möchtest, dass darüber diskutiert wird, dann lass einfach in Zukunft diese "blablabla"-Disclaimer. Du siehst ja, was es bringt. Zitieren
_Pete Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Ähm Jungs, ich weiß nicht ob es titan999 soviel hilft wenn ihr euch hier die köppe einschlagt, macht das doch am besten in einem anderen threat. er sucht hier hilfe und kein streitgespräch Zitieren
2K1.INC Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 er sucht hier hilfe und kein streitgespräch ja hilfe ist nicht immer gleich die lösung posten... Zitieren
_Pete Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Man lernt ab besten wenn es einem beigebracht wird! Ich zeige ihm nicht die Lösung sondern einen Beispielcode zu seinem Thema und schreibe auch gleich dazu was dies oder jenes macht. Damit er lernt und versteht! Mit Dingen wie Ja nimm LINQ kann er wirklich nichts Anfangen oder nimm Directory.GetFiles() da wird es ihm noch mehr die Fragezeichen raushauen, da keine wirklich erklärung dazu steht Zitieren
lbm1305 Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Man lernt ab besten wenn es einem beigebracht wird! Ich zeige ihm nicht die Lösung sondern einen Beispielcode zu seinem Thema und schreibe auch gleich dazu was dies oder jenes macht. Damit er lernt und versteht! Mit Dingen wie Ja nimm LINQ kann er wirklich nichts Anfangen oder nimm Directory.GetFiles() da wird es ihm noch mehr die Fragezeichen raushauen, da keine wirklich erklärung dazu steht Lernen würde er es, wenn Du vielleicht nur die Schritte beschrieben hättest. 1.) Verzeichnisse nach Dateien durchsuchen 2.) Jede Datei als Stream einlesen 3. Stream zeilenweise auslesen. etc... Aber das ist meine Meinung Zitieren
Gateway_man Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 string strValue = "Parameter"; //Dein Suchparameter StreamReader sr = new StreamReader(@"Pfad"); //Erstellt einen Streamreader auf deine Datei string strLine = string.Empty; //Initialisiert strLine(Suchergebnis) bool bFound = false;//Initilalisiert die Abfrage ob gefunden while (sr.Peek() >= 0 && bFound == false) //Sucht in der Datei solang bis das Ende der Datei erreicht ist ein Fund vorliegt { strLine = sr.ReadLine(); //Damit liest er die Datei Zeile für Zeile in strLine if (strLine.IndexOf(strValue) > 0)//Prüft ob in der Zeile dein gesuchter Parameter enthalten ist { bFound = true; //Wenn Parameter enthalten, Fund wir auf wahr gesetzt } } sr.Close(); //Schließt die Datei wieder if (true == bFound) //Wenn er fündig geworden ist dann { Console.WriteLine(strLine);//Gibt er die Zeile aus } Les dich aber lieber erstmal weiter in das ganze ein, da es viele Fehler geben kann wenn du versuchst dateien zu öffnen die es nicht mehr gibt, fehlerhaft sind oder oder oder ;-) da muss man aufpassen Das sieht ja ganz schön wüst aus. Nutze bitte das nächste mal Codetags und eventuell weniger Fonttags. Zum Thema zurück. Bei dir fehlen essentielle Schritte, wie das durchsuchen der Directories. Zumal empfehle ich auf die WindowsApi Funktionen (GetProfileString, etc.) zurückzugreifen, dann kannst du dir das einlesen und parsen der InI Struktur sparen. Das du eine Lösung vorgiebst ist ja schön und gut. Aber aus dem ersten Post des TE geht hervor, das er sich nicht sehr gut auskennt. Was ebenfalls auffällt ist, das der TE keine Zielsprache erwähnt, sprich bevor ich ihm eventuell eine Lösung anbieten würde/könnte, würde ich ersteinmal nachfragen, welche Sprache er bevorzugt nutzt. Da alles andere zu mehr Verwirrung führen könnte, speziell, da er ja sagt, er sei ein Anfänger. Das alles führt mich zurück auf meine eigentliche Frage: Welche Programmiersprache nutzt du denn? Falls du dir da nicht ganz Sicher bist, stehen folgende zur Auswahl: -Visual C ++ -C Sharp -VB Dot NET -F Sharp lg Gateway Zitieren
titan999 Geschrieben 26. Oktober 2010 Autor Geschrieben 26. Oktober 2010 Hi, also erst mal Danke für die ganzen Antworten. Ich verwende die Sprache C# ( C Sharp ) Werde mir die geposteten Lösungen mal zu gemüte führen. Wenn jemand weitere Möglichkeiten weiß, immer her damit ;-) Müssen keine fertigen Lösungen sein. Ich will ja schließlich noch was dabei lernen :-) Zitieren
lilith2k3 Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Naja, eigentlich wäre das eine prima Aufgabe für die Powershell ... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.