Entwickler-Ecke
IO, XML und Registry - Pfad aus untergeordneten Dateien ermitteln
s4nDer - Fr 20.06.08 09:17
Titel: Pfad aus untergeordneten Dateien ermitteln
Hallo,
ich sitze grade an einem Programm dran was ganz einfach die Versions Nummern und das Änderungsdatum der Dateien ausliest die sich im gleichen Ordner befinden wie das Programm.
Das Programm sucht dabei alle Dateien mit Hilfe einer Schleife ab und ich packe sie dann in ein Array wo ich sie dann weiter verarbeite.
Mein Problem ist jetzt das ich nich den Pfad aus den Ordnern bekomme die das Programm zusätzlich durchsucht. Ich bekomme zwar den Namen der Datei aus diesen Ordnern aber eben nich den Pfad den ich breuch.
Vielleicht isses auch ganz einfach (wahrscheinlich sogar) aber irgendwie steh ich grad aufn schlauch und wär nett wenn ihr viewlleicht ne lösung hättet.
Christian S. - Fr 20.06.08 10:09
Hallo und :welcome:!
Ich weiß ja nicht, wie Du die Dateien einliest (Quellcode wäre hier sinnvoll gewesen), aber FileInfo besitzt eine Eigenschaft DirectoryName, welche das Verzeichnis angibt, in dem sich die Datei befindet.
Bin nicht sicher, ob es das ist, was Du meintest. So ganz schlau bin ich nicht aus Deinem Beitrag geworden :nixweiss:
Grüße
Christian
s4nDer - Fr 20.06.08 11:00
Ok, hast du natürlich Recht hier der QuellCode. Mit deiner Variante hab ichs schon probiert kann aber durchaus sein das der Fehler schon irgendwo vorher liegt bei mir.
Mit AllDirectories lass ich das Programm ja überall suchen und wenn ich dann den vollen Pfad haben will gibt er mit z.B. c:\programme\datei.exe,c:\programme\datei2.exe... auch wenn sie noch in einem Unterordner liegen von c:\programme.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| String nZeichen = "\\"; int nStart = 0;
int nIndex = System.Reflection.Assembly.GetExecutingAssembly().Location.LastIndexOf(nZeichen);
String nPath = System.Reflection.Assembly.GetExecutingAssembly().Location.Substring(nStart, nIndex);
System.IO.StreamWriter sw = new System.IO.StreamWriter("Report.txt"); {
DirectoryInfo di = new DirectoryInfo(nPath);
FileInfo[] nDaten = di.GetFiles("*", SearchOption.AllDirectories);
Int32 nArrayLength = nDaten.GetLength(0);
for (int nZaehler = 0; nZaehler < nArrayLength; nZaehler++) {
} sw.Close(); |
bakachan - Fr 20.06.08 11:14
Du hast doch deine FileInfo-Objekte, von denen du mit .FullPath den kompletten Pfad der Datei bzw mit .DirectoryName den Pfad des verzeichnisses abrufen kannst. Und da kommt auch der richtige Pfad zurück, solltest eventuell deinen Code durchsuchen ob du bei der weiterverarbeitung was daran änderst oder eine andere Variable verwendest o.ä.
s4nDer - Fr 20.06.08 11:23
Wenn ich mir den kompletten Pfad mit .FullName anzeigen lasse wird mir angezeigt...
c:\programme\Datei.exe
c:\programme\Datei2.exe
c:\programme\Datei3.exe
c:\programme\Datei4.exe
bei den ersten beiden Dateien vielleicht alles supi, aber die 2 letzten Dateien liegen beispielsweise unter c:\programme\system\...
d.h. er lässt den ganzen Unterordner weg.
mit Path.GetFullPath genau das gleiche.
JüTho - Fr 20.06.08 11:36
Ich meine auch, dass Du mit FileInfo die vollständigen und richtigen Informationen bekommen müsstest:
C#-Quelltext
1: 2: 3:
| foreach(FileInfo fi in nDaten) { sw.Write(fi.FullName + Environment.NewLine); } |
Aber vielleicht bringt die Abfrage nach den Dateien mit "*" ein falsches Ergebnis; benutze:
C#-Quelltext
1:
| FileInfo[] nDaten = di.GetFiles("*.*", SearchOption.AllDirectories); |
Außerdem gibt es für den Ausgangspfad bei WinForms-Anwendungen eine direkte Lösung:
C#-Quelltext
1:
| String nPath = System.Windows.Forms.Application.StartupPath; |
Jürgen
bakachan - Fr 20.06.08 11:40
Also ich habe deinen Code mal kopiert und bin mal mit Einzelschritten durchgegangen.
In deinem Feld nDaten stehen auf jeden Fall die richtigen Daten (hatte extra einige Unterordner erstellt und darin dateien abgelegt), mir werden auch die Unterordner mit angezeigt.
s4nDer - Fr 20.06.08 11:58
So erstmal vielen Dank für die schnellen Hilfen und hat jetzt mit...
C#-Quelltext
1: 2: 3: 4:
| foreach(FileInfo fi in nDaten) { sw.Write(fi.FullName + Environment.NewLine); } |
... geklappt.
Danke JüTho und die anderen natürlich auch.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!