static void TryPrintNonExistingDriveInfo()
{
// Формируем массив букв используемых дисков
char[] usedLetters = DriveInfo.GetDrives().Select(d => d.Name[0]).OrderBy(ch => ch).ToArray();
// Формируем массив английских букв от C до Z
// Для это пользуемся тем фактом что в кодировке UTF-16 они идут друг за другом
char[] lettersFromC = Enumerable.Range(0, 24).Select(i => ((char)('C' + i))).ToArray();
// Получаем первую незанятую букву диска, если она есть
char firstUnusedLetter = lettersFromC.Except(usedLetters).FirstOrDefault();
if (firstUnusedLetter == '\0')
{
Console.WriteLine("На данном компьютере заняты все буквы дисков!");
}
else
{
DriveInfo nonExistingDrive = new DriveInfo(firstUnusedLetter + ":");
Console.WriteLine(
"Диск {0} не существует. Его тип: {1}",
nonExistingDrive.Name, nonExistingDrive.DriveType
);
}
}