Не найти все диски в С#.net 8.0/9.0 с помощью GetDrives()C#

Место общения программистов C#
Ответить
Anonymous
 Не найти все диски в С#.net 8.0/9.0 с помощью GetDrives()

Сообщение Anonymous »

Я создаю файловый менеджер для разработки приложения для обработки изображений. Я использую GetDrives(), чтобы начать загрузку древовидного представления, и оно возвращает все внутренние диски, включая два на внутреннем диске NVME. Но он не показывает никаких внешних дисков — до тех пор, пока — я не вставлю диск в привод cdrom, затем он показывает все подключенные диски, как внутренние, так и внешние. В тот момент, когда я удаляю компакт-диск, он больше не видит внешние диски.
Кроме того, хотя и не обязательно, любые указатели на [рекурсивную?] загрузку подкаталогов помогут ускорить разработку, и очень признателен.
Это мой код на сегодняшний день:
private void loadTree()
{
treeView1.Nodes.Clear();

try
{
//first get all available drives
DriveInfo[] allDrives = DriveInfo.GetDrives();
var driveCount = allDrives.Length;
for (var d = 0; d < driveCount; d++)
{
treeView1.Nodes.Add(new TreeNode(allDrives[d].Name));

// Make a reference to a directory.
DirectoryInfo di = new DirectoryInfo(treeView1.Nodes[d].Text);

// Get a reference to each directory in that directory.
DirectoryInfo[] diArr = di.GetDirectories();

// Display the names of the directories.
var dc = diArr.Length;
for (var dr = 0; dr < dc; dr++)
{
String currNode = diArr[dr].Name;
treeView1.Nodes[d].Nodes.Add(new TreeNode(currNode));

}
}

}
catch (Exception e)
{

//todo write handler

}
}

//This is the modified code to overcome the exception thrown when accessing an empty drive.
private void loadTree()
{
treeView1.Nodes.Clear();

try
{
//first get all available drives
DriveInfo[] allDrives = DriveInfo.GetDrives();
var driveCount = allDrives.Length;
var d = -1; var nodeCount = -1;

while (d < driveCount)
{
//increment the indexes
d++; nodeCount++;

//Check the drive is ready to access
DriveInfo thisDrive = new DriveInfo(allDrives[d].Name);
if (thisDrive.IsReady)
{
//Add the drive to the treeview
treeView1.Nodes.Add(new TreeNode(thisDrive.Name));

//Make a reference to a directory.
DirectoryInfo di = new DirectoryInfo(thisDrive.Name);

// Get a reference to each directory in that drive.
DirectoryInfo[] diArr = di.GetDirectories();

// Display the names of the directories.
var dc = diArr.Length;
for (var dr = 0; dr < dc; dr++)
{
String currNode = diArr[dr].Name;
treeView1.Nodes[nodeCount].Nodes.Add(new TreeNode(currNode));
}
}
else
{
//decrement nodeCount to forestall treeview exception
nodeCount--;
continue;
}
}
}
catch (Exception e)
{

//todo write handler

}
}



Подробнее здесь: https://stackoverflow.com/questions/792 ... -getdrives
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»