Определение свободного места на диске

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Определение свободного места на диске

Сообщение areh » 30.04.2003 (Ср) 9:02

Люди подскажите, как, используя классы из .Net можно определить свободное место на диске.

Или подскажите в чем может быть касяк при получении этих данных с помощью функции GetDiskFreeSpace

Всем заранее спасибо

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 30.04.2003 (Ср) 11:38

:arrow: Для определения свободного места на диске в Win32 используются функции GetDiskFreeSpaceEx или GetDiskFreeSpace. В принципе, функция GetDiskFreeSpaceEx возвращает всю необходимую информацию, включая свободное место доступное пользователю, ассоциированному с вызывающим потоком. Но, как это обычно бывает с удобными и полезными функциями, она отсутствует в ранних версиях Windows. :?

Раньше я юзал примерно так:
[Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long
Private Sub Form_Load()
Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
Const RootPathName = "C:\"
Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
Me.AutoRedraw = True
Me.Cls
Me.Print
Me.Print " Всего:", Format$(TotalBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Всего свободно:", Format$(TotalFreeBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Доступно:", Format$(BytesFreeToCalller * 10000, "###,###,###,##0") & " bytes"
Me.Print " Всего занято:", Format$((TotalBytes - TotalFreeBytes) * 10000, "###,###,###,##0") & " bytes"
End Sub]


На .NET ещё не было необходимости, не копал ... :(

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 30.04.2003 (Ср) 12:00

:arrow: Хотя и в .NET не очень сложно, есть пространство System.Management (почему я его раньше не покопал :?: ) Использовать примерно так:
[Imports System.Management

***
Dim myMOC As ManagementObjectCollection = (New ManagementObjectSearcher(New SelectQuery("SELECT FreeSpace FROM Win32_LogicalDisk WHERE deviceID = 'C:'"))).Get()
Dim myMO As ManagementObject
For Each myMO In myMOC
MessageBox.Show("Диск C: " & myMO.Properties("FreeSpace").Value.ToString() & " Байт свободно.")
Next

***]


Вроде живёт ....... :)

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 30.04.2003 (Ср) 15:15

Большое спасибо.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList