powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Названия дисков в формате (hd0,0)
11 сообщений из 11, страница 1 из 1
Названия дисков в формате (hd0,0)
    #38007534
Нужно прочитать название диска в переменную в формате (hd0,0), (hd1) и т.д.
Т.е. определить какое название у диска в формате (hd0,0) под заданной буквой.
Подскажите код на VisualBasic.net
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38007561
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мегапризрак,

в таком именно формате хз, но номер раздела можно получить так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
REM Add reference -> System.Management
Imports System.Management

Module Module1

	Function GetHardDrivePartion(driveLetter As String) As String
		Dim scope = New ManagementScope("\root\cimv2")
		Dim query = New ObjectQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & driveLetter & """} where assocclass=Win32_LogicalDiskToPartition")
		Dim searcher = New ManagementObjectSearcher(scope, query)
		Dim partions = searcher.Get()
		If (partions.Count > 0) Then
			Return partions(0)("deviceid").ToString()			
		End If		
	End Function

	Sub Main()
		Console.WriteLine(GetHardDrivePartion("C:"))
	End Sub

End Module
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38007564
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращает вот в таком формате:
Disk #0, Partition #2
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38007565
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот так возвращает в нужном Вам формате:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
REM Add reference -> System.Management
Imports System.Management

Module Module1

	Function GetHardDrivePartion(driveLetter As String) As String
		Dim scope = New ManagementScope("\root\cimv2")
		Dim query = New ObjectQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & driveLetter & """} where assocclass=Win32_LogicalDiskToPartition")
		Dim searcher = New ManagementObjectSearcher(scope, query)
		Dim partions = searcher.Get()
		If (partions.Count > 0) Then
			Dim disk = partions(0)("diskindex")
			Dim partion = partions(0)("index")
			Return String.Format("(hd{0},{1})", disk, partion)
		End If
		Return ""
	End Function

	Sub Main()
		Console.WriteLine(GetHardDrivePartion("D:"))
	End Sub

End Module
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38008549
Lelouch,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Imports System.Management

Module Module1

	Function GetHardDrivePartion(driveLetter As String) As String
		Dim scope = New ManagementScope("\root\cimv2")
		Dim query = New ObjectQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & driveLetter & """} where assocclass=Win32_LogicalDiskToPartition")
		Dim searcher = New ManagementObjectSearcher(scope, query)
		Dim partions = searcher.Get()
		If (partions.Count > 0) Then
			Dim disk = partions(0)("diskindex")
			Dim partion = partions(0)("index")
			Return String.Format("(hd{0},{1})", disk, partion)
		End If
		Return ""
	End Function

	Sub Main()
		Console.WriteLine(GetHardDrivePartion("D:"))
	End Sub

End Module



То что подчеркнуто пишет невозможно индексировать класс: System.Management.ManagementObjectCollection
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38008613
Все нашел ошибку и исправил код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 Function GetHardDrivePartion(ByVal driveLetter As String) As String
        Dim scope = New ManagementScope("\root\cimv2")
        Dim query = New ObjectQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & driveLetter & """} where assocclass=Win32_LogicalDiskToPartition")
        Dim searcher = New ManagementObjectSearcher(scope, query)
        Dim partions As System.Management.ManagementObjectCollection = searcher.Get()
        If (partions.Count > 0) Then
            For Each item In partions
                Dim disk = item("diskindex")
                Dim partion = item("index")
                Return String.Format("(hd{0},{1})", disk, partion)
            Next
        End If
        Return ""
    End Function
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38008873
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мегапризрак,

в 2012 студии все было нормально)) 10 для проверки не имею)
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38008875
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мегапризрак,

зачем вам For each ? вы издеваетесь? На крайний случай используйте метод расширения ElementAt() или уберите If
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38008881
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше First() или FirstOrDefault() )))
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38010626
LelouchМегапризрак,

зачем вам For each ? вы издеваетесь? На крайний случай используйте метод расширения ElementAt() или уберите If
Т.к partions - это коллекция. Для поиска значений из коллекции используют FOR EACH
...
Рейтинг: 0 / 0
Названия дисков в формате (hd0,0)
    #38010736
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мегапризрак,

МегапризракТ.к partions - это коллекция. Для поиска значений того, чтобы взять 1е значение из коллекции используют овать FOR EACH ,при наличии LINQ, крайне странно

К сожалению ManagementObjectCollection реализует только IEnumerable (не Generic), поэтому кода получается чуть больше, чем обычно.

Код: vbnet
1.
2.
3.
4.
Dim partion = partions.OfType(Of ManagementObject)().FirstOrDefault()
If (partion IsNot Nothing) Then
	Return String.Format("(hd{0},{1})", partion("diskindex"), partion("index"))
End If


Имхо, смотрится гораздо лучше.
P.S. В любом случае при использовании For Each оставлять проверку количества элементов - бред.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Названия дисков в формате (hd0,0)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]