Entwickler-Ecke
Sonstiges (.NET) - Bei Verzeichnissen Laufwerksbuchstaben ermitteln
fossanita - Mo 26.01.09 17:45
Titel: Bei Verzeichnissen Laufwerksbuchstaben ermitteln
Hallo Leute,
Ich habe folgendes Problem.
Ich versuche gerade ein Programm zu schreiben, das eine grafische Oberfläche hat und per Knopfdruck den Laufwerksbuchstaben ermittelt wo sich der entsprechende Verzeichnis sich befindet, dabei wird auf der grafischen Oberfläche gezeigt, welche Laufwerksbuchstabe es ist. Ich bin zwar auf die Methode "Environment.GetLogicalDrives();" draufgekommen, aber ich möchte eigentlich nur dieses angezeigt haben, in welchen Laufwerk sich diese Datei befindet.
Das Problem mit diesen algoritmus hier ist, dass es den Verzeichnis nicht findet... :(
Hier der Programmcode:
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace MyForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string []drives = Environment.GetLogicalDrives(); string savedDrive = ""; int drivezahl = drives.Length-1; string[] drives2 = Environment.GetLogicalDrives(); for (int i = 0; i < drives2.Length; i++) { for (int j = drivezahl; j >= 0 ; j--) { if ((drives[i]+"ha\\setup.exe").Equals(drives2[j]+"ha\\setup.exe")) { savedDrive = drives[i]; } else { savedDrive = "Not Found"; } }
} label1.Text = (savedDrive); }
} } |
Gibt es vielleicht Lösungen dazu oder andere Alternativen ?
Ich bitte um Rückmeldungen.
Gruß fossanita
Moderiert von
Kha: C#-Tags hinzugefügt
bakachan - Mo 26.01.09 17:55
Hallo fossanita,
Ich verstehe nicht was du mit deinen 2 schleifen bezwecken willst in denen du 2 identisches string-Arrays durchläufst und nur strings vergleichst.
Aber hier mal ein kleiner Denkanstoß womit du überprüfen kannst ob eien Datei existiert :
C#-Quelltext
1: 2:
| string path = "C:\\Test\\bla.txt"; bool result = System.IO.File.Exists(path); |
Ansonsten kannst du dich bei den System.IO klassen mal umschaun da gibt es auch noch andere interessante Klassen für dich (z.B. DirectoryInfo).
fossanita - Mo 26.01.09 20:21
[quote="
bakachan"(546047)]Hallo fossanita,
Ich verstehe nicht was du mit deinen 2 schleifen bezwecken willst in denen du 2 identisches string-Arrays durchläufst und nur strings vergleichst.
-Also ich habe eigentlich gedacht, wenn die Datei irgendwo in einen Laufwerk befindet z.b. Laufwerk D, dann soll es prüfen, ob die datei sich im Laufwerk D befindet.
Aber hier mal ein kleiner Denkanstoß womit du überprüfen kannst ob eien Datei existiert :
C#-Quelltext
1: 2:
| string path = "C:\\Test\\bla.txt"; bool result = System.IO.File.Exists(path); |
-Vielen Dank es hat geklappt, die Datei sollte ja existieren, dennoch muss ich davon ausgehen, dass die Datei in einen Laufwerk befindet, das aber andere Laufwerksbuchstaben (anstatt C:\ , Laufwerk D:\ heisst) trägt, darum brauche ich also einen Befehl, das also herausfindet, dass die Datei tatsächlich im Laufwerk D befindet und dann danach ausführt mit "System.Diagnostics.Process.Start(laufwerkspfad+"Ordner\bla.exe");" Bisher habe ich nur mit "Environment.GetLogicalDrives();" versucht, die Laufwerksbuchstaben aufzulisten, aber das hat mir bisher nix gebracht... :((
Gruß Fossanita
jaenicke - Mo 26.01.09 20:48
Du kannst den Laufwerksbuchstaben ja entfernen und dann verschiedene ausprobieren:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| string path = @":\Test\bla.txt"; MessageBox.Show(path.Insert(0, "C")); MessageBox.Show(path.Insert(0, "D")); MessageBox.Show("C" + path); MessageBox.Show("D" + path); |
fossanita - Mo 26.01.09 21:12
jaenicke hat folgendes geschrieben : |
Du kannst den Laufwerksbuchstaben ja entfernen und dann verschiedene ausprobieren: C#-Quelltext 1: 2: 3: 4: 5: 6:
| string path = @":\Test\bla.txt"; MessageBox.Show(path.Insert(0, "C")); MessageBox.Show(path.Insert(0, "D")); MessageBox.Show("C" + path); MessageBox.Show("D" + path); | |
-Ja ok, eigentlich ist es meine Absicht zu prüfen, in welchen Laufwerk die Datei sich tatsächlich befindet und dann dies in eine Variable zu speichern.
Trotzdem Danke noch :)
Gruß Fossanita
jaenicke - Mo 26.01.09 21:39
Das meine ich ja. ;-)
Nehmen wir einmal an in textBox1 steht ein voller Pfad inkl. Laufwerksangabe. Und du möchtest jetzt alle Laufwerksbuchstaben durchgehen mit diesem Pfad und schauen, ob der neue Pfad dann exstiert:
C#-Quelltext
1: 2: 3: 4: 5:
| string[] drives = Environment.GetLogicalDrives(); string path = textBox1.Text.Substring(3); foreach (string drive in drives) if (System.IO.File.Exists(drive + path)) MessageBox.Show(drive + path + " existiert"); |
fossanita - Di 27.01.09 20:55
thx leute !!
Ihr habt mir sehr viel geholfen - Vielen Dank :zustimm:
Es hat geklappt wie es sein sollte.
Nur eine Frage noch, was ist der Befehl "foreach" ? Ich hab das eigentlich noch nie gehört...
Gruß Fossanita
jaenicke - Di 27.01.09 21:02
Du kannst ja mit einer for-Schleife alle Indizes eines Arrays z.B. durchgehen. Dies ist aber etwas was man häufig braucht. Und deshalb kannst du mit foreach direkt alle Einträge / Teile durchgehen. Also so:
C#-Quelltext
1: 2: 3: 4: 5:
| for (int i = 0; i < drives.Length; i++) { string drive = drives[i]; ... } |
Das wäre das selbe (nur vermutlich weniger effizient).
In diesem Fall gehe ich alle Einträge in drives durch. Der aktuelle Eintrag landet dann in drive. D.h. ich deklariere dafür praktisch eine Variable.
"Für jedes Laufwerk (drive), was ein String ist (string drive), im Array drives mache das folgende." wäre praktisch die Anweisung. ;-)
Das geht natürlich auch mit Aufzählungen, also allem, in dem mehrere Bestandteile drin sind sozusagen.
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!