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

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

Сообщение Anonymous »

Я создаю файловый менеджер для разработки приложения для обработки изображений. Я использую GetDrives(), чтобы начать загрузку своего древовидного представления, и он возвращает все внутренние диски, включая два на внутреннем диске NVME.
Но он ничего не показывает внешние диски - пока я не вставлю диск в привод CD-ROM, он покажет все подключенные диски, как внутренние, так и внешние. В тот момент, когда я извлекаю компакт-диск, он больше не видит внешние приводы.
Кроме того, хотя это и не обязательно, есть какие-нибудь указания относительно рекурсивного подхода? загрузка подкаталогов поможет ускорить разработку, и я очень признателен.
Это мой код на сегодняшний день:
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#»