myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Ersten freien Laufwerksbuchstaben raussuchen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Ersten freien Laufwerksbuchstaben raussuchen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
southside94
myCSharp.de-Mitglied

Dabei seit: 19.02.2019
Beiträge: 4


southside94 ist offline

Ersten freien Laufwerksbuchstaben raussuchen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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...
19.02.2019 23:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 ;-)
20.02.2019 06:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
southside94
myCSharp.de-Mitglied

Dabei seit: 19.02.2019
Beiträge: 4

Themenstarter Thema begonnen von southside94

southside94 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das ist mir schon klar.

Das ist aktuell der Code welcher mir die Laufwerksbuchstaben raussucht:

C#-Code:
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
20.02.2019 16:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 473
Entwicklungsumgebung: VS Studio 2019, Android Studio
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich würde das ganze etwas vereinfachen:

C#-Code:
        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:

C#-Code:
Console.WriteLine(string.Join(",", this.GetFreeDriveLetters());

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hypersurf am 20.02.2019 17:55.

20.02.2019 17:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
southside94
myCSharp.de-Mitglied

Dabei seit: 19.02.2019
Beiträge: 4

Themenstarter Thema begonnen von southside94

southside94 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von southside94 am 20.02.2019 18:20.

20.02.2019 18:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
da_user da_user ist männlich
myCSharp.de-Mitglied

Dabei seit: 21.08.2008
Beiträge: 90
Entwicklungsumgebung: VS 2015 Comunity
Herkunft: nähe Regensburg


da_user ist offline Füge da_user Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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:

C#-Code:
ConsoleWriteLine(GetFreeDriveLetters()[0]);

Oder, u.U. besser verständlich:

C#-Code:
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.
20.02.2019 18:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.221
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von southside94:
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.
20.02.2019 22:47 Beiträge des Benutzers | zu Buddylist hinzufügen
southside94
myCSharp.de-Mitglied

Dabei seit: 19.02.2019
Beiträge: 4

Themenstarter Thema begonnen von southside94

southside94 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Jetzt habe ich es verstanden.

Vielen dank ;)
20.02.2019 23:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Monate.
Der letzte Beitrag ist älter als 8 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.11.2019 18:05