Laden...

Ersten freien Laufwerksbuchstaben raussuchen

Erstellt von southside94 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.190 Views
S
southside94 Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren
Ersten freien Laufwerksbuchstaben raussuchen

Hallo zusammen,

ich bin relativ neu im Thema C#.

Ich bräuchte aktuell einen Code, welcher schaut, welche Laufwerksbuchstaben frei sind und mir den ersten freien Buchstaben in einen String (z.B. freeDrive) einfügt.

Ich habe zwar schon viele Code's gefunden, aber mit denen komme ich nicht so ganz klar. Funktionieren tun diese zwar, aber sie geben die freien Buchstaben nur als Liste aus...

C
2.121 Beiträge seit 2010
vor 5 Jahren

Eine Liste kann man sortieren. Dann steht der erste/kleinste Eintrag an erster Stelle.
Auslesen kann man diesen Eintrag natürlich auch.

Wenn du Code hast der diese Buchstaben rausfindet, dann siehst du dem doch an wie er es macht. Ich würde in solchen Fällen immer empfehlen, den Code nicht einfach nur reinzukopieren sondern zu verstehen. Programmieren ist nicht nur zusammenklicken 😉

S
southside94 Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Das ist mir schon klar.

Das ist aktuell der Code welcher mir die Laufwerksbuchstaben raussucht:

private static List<string> GetFreeDriveLetters()
        {
            DriveInfo[] usedDrives = System.IO.DriveInfo.GetDrives();
            Dictionary<string, string> usedDriveLetters = new Dictionary<string, string>(usedDrives.Length);

            string[] driveLetters = new string[26] { "A:", "B:", "C:", "D:", "E:",
                                                     "F:", "G:", "H:", "I:", "J:",
                                                     "K:", "L:", "M:", "N:", "O:",
                                                     "P:", "Q:", "R:", "S:", "T:",
                                                     "U:", "V:", "W:", "X:", "Y:", "Z:", };

            int freeDriveCount = driveLetters.Length - usedDrives.Length;

            List<string> freeDriveLetters = new List<string>(freeDriveCount);

            foreach ( DriveInfo usedDrive in usedDrives )
            {
                string driveLetter = usedDrive.Name.Replace(Path.DirectorySeparatorChar.ToString(),"");
                usedDriveLetters.Add(driveLetter, string.Empty);
            }

            foreach ( string driveLetter in driveLetters )
            {
                if ( !usedDriveLetters.ContainsKey(driveLetter) )
                {
                    freeDriveLetters.Add(driveLetter);
                }
            }

            return freeDriveLetters;
        }

leider weiß ich nicht wie ich auf freeDriveLetters zugreifen kann.
z.B. ConsoleWriteLine(freeDriveLetter[0]; funktioniert nicht

Sobald ich das return freeDriveLetter entferne geht es

H
523 Beiträge seit 2008
vor 5 Jahren

Ich würde das ganze etwas vereinfachen:


        private List<string> GetFreeDriveLetters()
        {
            List<string> retVal = new List<string>();
            DriveInfo[] usedDrives = System.IO.DriveInfo.GetDrives();

            string[] driveLetters = new string[26] { "A:", "B:", "C:", "D:", "E:",
                                                     "F:", "G:", "H:", "I:", "J:",
                                                     "K:", "L:", "M:", "N:", "O:",
                                                     "P:", "Q:", "R:", "S:", "T:",
                                                     "U:", "V:", "W:", "X:", "Y:", "Z:", };


            foreach (string driveLetter in driveLetters)
            {
                string searchLetter = $"{driveLetter}{Path.DirectorySeparatorChar.ToString()}";
                if (!usedDrives.Any(o => o.Name.Equals(searchLetter, StringComparison.InvariantCultureIgnoreCase)))
                {
                    retVal.Add(searchLetter);
                }
            }

            return retVal;
        }

Kann's gerade nicht testen, sollte aber laufen und Dir die eine Liste mit den freien Laufswerksbuchstaben zurückgeben:


Console.WriteLine(string.Join(",", this.GetFreeDriveLetters());
S
southside94 Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Funktioniert leider auch nicht ganz.
bei mir wird "this" nicht akzeptiert

Also ich möchte einen String haben wo der erste verfügbare Laufwerksbuchstabe drin ist.

z.B.

string buchstabe = ???;

ConsoleWriteLine(buchstabe);

nur das ich den "buchstabe" anderweitig verwende.

D
94 Beiträge seit 2008
vor 5 Jahren

leider weiß ich nicht wie ich auf freeDriveLetters zugreifen kann.
z.B. ConsoleWriteLine(freeDriveLetter[0]; funktioniert nicht

Sobald ich das return freeDriveLetter entferne geht es

Gar nicht. Das ist eine Variable die nur in der Methode gültig ist. Der Aufruf von "GetFreeDriveLetters()" liefert dir eine String-Liste mit den freien Laufwerksbuchstaben zurück:

 ConsoleWriteLine(GetFreeDriveLetters()[0]);

Oder, u.U. besser verständlich:

List<string> FreieLaufwerksbuchstaben = GetFreeDriveLetters()

Rückgabewert einer Methode ist allerdings Grundlagenwissen.
Ums simpel zu erklären: wenn du eine 'Methode' programmierst, schreibst du "quasi" einen Befehl wie es z.B. "System.IO.DriveInfo.GetDrives()" einer ist.

5.657 Beiträge seit 2006
vor 5 Jahren

bei mir wird "this" nicht akzeptiert

[FAQ] Wie finde ich den Einstieg in C#?
[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Und beim nächsten Mal bitte im richtigen Forum posten. Das Projekte-Forum ist zur Vorstellung von eigenen Projekten gedacht.

Weeks of programming can save you hours of planning

S
southside94 Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Jetzt habe ich es verstanden.

Vielen dank 😉