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...
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 😉
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
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());
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.
leider weiß ich nicht wie ich auf freeDriveLetters zugreifen kann.
z.B. ConsoleWriteLine(freeDriveLetter[0]; funktioniert nichtSobald 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.
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