Programming/Windows API
GetDiskFreeSpace함수는 원하는 Disk의 총용량과 사용량을 구하는 함수입니다.

Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, ByRef lpSectorsPerCluster As Integer, ByRef lpBytesPerSector As Integer, ByRef lpNumberOfFreeClusters As Integer, ByRef lpTotalNumberOfClusters As Integer) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetDiskFreeSpace(string lpRootPathName, ref int lpSectorsPerCluster, ref int lpBytesPerSector, ref int lpNumberOfFreeClusters, ref int lpTotalNumberOfClusters);
▶C# 선언

GetDiskFreeSpace함수의 첫번째 인수는 용량을 확인할 Drive의 Root경로를 지정합니다. 그리고 두번째 인수는 Cluster당 Sector, 세번째 인수는 Sector당 Byte, 네번째 인수는 사용하지 않는 Cluster수 그리고 마지막 다섯번째 인수는 전체 Cluster가 저장될 수 있는 변수를 지정합니다.

Dim iSector_Clustor As Integer = 0
Dim iByte_Sector As Integer = 0
Dim iFree_Clustor As Integer = 0
Dim iTotal_Clustor As Integer = 0
▶VB.NET

int iSector_Clustor = 0;
int iByte_Sector = 0;
int iFree_Clustor = 0;
int iTotal_Clustor = 0;
▶C#

위 인수를 토대로 C Drive의 용량정보를 확인하려면 GetDiskFreeSpace함수는 다음과 같이 호출될 수 있습니다.

GetDiskFreeSpace("C:\", iSector_Clustor, iByte_Sector, iFree_Clustor, iTotal_Clustor)
▶VB.NET 선언

GetDiskFreeSpace("C:\\",ref iSector_Clustor,ref iByte_Sector,ref iFree_Clustor,ref iTotal_Clustor);
▶C# 선언

이제 변수에 전달된 값을 토대로 C Drive에서 사용하지 않는 용량을 확인해 보려면 다음과 같이 계산합니다.

iSpace = iFree_Clustor * iSector_Clustor
iSpace *= iByte_Sector
iSpace / (1024 * 1024)
▶VB.NET

iSpace = iFree_Clustor * iSector_Clustor;
iSpace *= iByte_Sector;
iSpace / (1024 * 1024);
▶C#

위 계산대로라면 iSpace변수에는 현재 C Drive에서 사용가능한 용량을 MB(Mega Byte)단위로 가지게 됩니다. 초기 용량에 해당하는 각 변수의 값은 Byte단위이므로 이것은 Kilo Byte단위로 바꾸려면 1024를 곱해야 하고 Mega Byte단위로 바꾸려면 1024를 한번더 곱해야 하는 것입니다. 단연히 GB단위로 바꾸려면 1024를 다시 한번 더 곱하면 됩니다.

만일 현재 Drive의 총용량을 계산하려면 iFree_Clustor대신 ITotal_Clustor변수로만 바꿔서 다시 계산합니다.

iSpace = iTotal_Clustor * iSector_Clustor
▶VB.NET

iSpace = iFree_Clustor * iSector_Clustor;
▶C#
0 0