Autor Beitrag
fossanita
Hält's aus hier
Beiträge: 4

Win Vista Ultimate

BeitragVerfasst: Mo 26.01.09 17:45 
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:

ausblenden volle Höhe 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"))
//Hier sollen die Verzeichnisse vergleicht werden, ob sie vorhanden sind
                        {
                            savedDrive = drives[i];
//Wenn ja, dann soll der Laufwerksbuchstabe in savedDrive gespeichert werden
                        }
                        else
                        {
                            savedDrive = "Not Found";
//Wenn nicht, dann nicht gefunden
                        }
                    }
                   

                }
                
                label1.Text = (savedDrive);
 //ausgabe auf label               
                //System.Diagnostics.Process.Start(savedDrive + ":\\ha\\tes.exe");
//Zum schluss sollte die Datei mit den gefundenen Laufwerksbuchstaben ausgeführt werden (bsp. CD Rom)
            }

    }
}

Gibt es vielleicht Lösungen dazu oder andere Alternativen ?

Ich bitte um Rückmeldungen.

Gruß fossanita

Moderiert von user profile iconKha: C#-Tags hinzugefügt
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 :
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 4

Win Vista Ultimate

BeitragVerfasst: Mo 26.01.09 20:21 
[quote="user profile iconbakachan"(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 :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.01.09 20:48 
Du kannst den Laufwerksbuchstaben ja entfernen und dann verschiedene ausprobieren:
ausblenden 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"));
// oder
MessageBox.Show("C" + path);
MessageBox.Show("D" + path);
fossanita Threadstarter
Hält's aus hier
Beiträge: 4

Win Vista Ultimate

BeitragVerfasst: Mo 26.01.09 21:12 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst den Laufwerksbuchstaben ja entfernen und dann verschiedene ausprobieren:
ausblenden 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"));
// oder
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
            string[] drives = Environment.GetLogicalDrives();
            string path = textBox1.Text.Substring(3); // ohne Laufwerk
            foreach (string drive in drives)
                if (System.IO.File.Exists(drive + path))
                    MessageBox.Show(drive + path + " existiert");
fossanita Threadstarter
Hält's aus hier
Beiträge: 4

Win Vista Ultimate

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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.