본문 바로가기

IT/Visual Basic

[강좌] [WinAPI]GetDiskFreeSpaceEx() 함수를 이용해, 용량을 알아보자.(수정2)

안녕하세요. 어떨결에 MS에서 API를 쳤는데 나온 함수를 소개할까해요.

 

이 함수가 없는것같아서. 알고보니 간단하더군요! 해석하기가 쉬웠어요! 그래서 올려보아요.

 

폼 디자인은 이렇게 해주세요. 텍스트박스 1개, 커맨드박스 1개, 라벨 3개

 

이름은 아무넣게나 해도 되요. 저는 안바꾸는편이라..

 



자 코딩을 해볼까요?

 

일단 API를 쓸려면 API를 선언해야겠죠?

 

 

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As CurrencyAs Long

 

자 해석을 해봅시다.

 

ByVal lpDirectoryName As String  디렉토리 파일을 참조합니다.

 

'--바람개비님 제보.  GetDiskFreeSpaceEx을 정확하게, 인자값을 를 지적해주셨어요. 감사합니다.

Parameters
lpDirectoryName [in]
- 알고자 하는 저장매체의 디렉토리 이름
- NULL 이면 Object Stroe 의 공간 정보를 가져온다.
 
lpFreeBytesAvailableToCaller [out]
- 남은 저장공간 용량
 
lpTotalNumberOfBytes [out]
- 전체 저장공간 용량
 
lpTotalNumberBytesOfFreeBytes [out]
- 전체 저장공간에서 남은 저장공간 용량
- NULL
 
Retrun Value
- 0 이면 실패 ( GetLastError() 로 실패 확인 가능 )
- 0 이 아니면 성공

출처 : http://blog.naver.com/pkkkkkk/80054731958

 

'----------------------------------------------------------------------------------------

 

Private Sub Form_Load()


Text1 = Environ("SystemDrive") & "\"


End Sub

 

자 폼 로드시, 시스템 드라이브를 참조하게 만들려면.

 

Text1 = Environ("systemdrive") & "\" 와 같이 코딩해요.

 

Environ은 환경 변수를 의미해요. 내장함수지요. 자 잠시 Environ 함수를 알아보아요

 

 Text1 = Environ("HomeDrive") & "\"

 

 Text1 = Environ("SystemDrive") & "\"

 

 Text1 = Environ("AppData") & "\"

 

이렇게 코딩을 하면 어떤 결과물이 나올까요?

 

Text1은 홈드라브가 나오겠죠. Ex) C:\ , D:\

 

전 Window7을 D:\에 깔았으니, D:\가 나올꺼예요.

 

Text2 역시, 시스템 드라이브를 참조하겠죠. 그러므로 HomeDirve처럼 시스템 드라이브가 출력되어요.


Text3는 Appdata의 경로를 출력해주어요. 전 Window7이고, 사용자명은 a이니.

 

'D:\Users\a\AppData\Roaming\'을 출력해주어요.

 

환경변수는 많아요, UserProfile 이라던지 등등 갑작이 생각이 안나네요.

 

자 이제 본론으로 가볼까요?

 

자 커맨드버튼에 다음과같이 코딩해주어요.

 

 Private Sub Command1_Click()
  Dim Status As Long
    Dim TotalBytes As Currency
    Dim FreeBytes As Currency
    Dim BytesAvailableToCaller As Currency
    
    Status = GetDiskFreeSpaceEx(Text1.Text, BytesAvailableToCaller, _
      TotalBytes, FreeBytes)
End Sub

 

자 또 해석을 해볼까요?!

 

Dim Status As Long 총 모든 용량의 크기를 담을 함수를 선언합니다.


    Dim TotalBytes As Currency 총 용량의 크기를 담을 함수를 선언합니다.


    Dim FreeBytes As Currency 남은용량 크기를 담을 함수를 선언합니다.

 

'--바람개비님 제보.  lpFreeBytesAvailableToCaller 인자값을 를 제보해주셨어요.


    Dim BytesAvailableToCaller As Currency 클러스트 당 섹터수를 지정할 변수를 선언합니다.

 

Status = GetDiskFreeSpaceEx(Text1.Text, BytesAvailableToCaller, _
      TotalBytes, FreeBytes)

GetDiskFreeSpaceEx() 함수를 이용해 모든 용량 크기 을 담습니다.

 

    If Status <> 0 Then
        Label1 = Format(TotalBytes * 10000, "#,##0") & " Total Bytes"
        Label2 = Format(FreeBytes * 10000, "#,##0") & " Free Bytes"
        Label3 = Format(BytesAvailableToCaller * 10000, "#,##0") & " Bytes Available To Caller"
    End If

 

Status가 0보다 작거나 크면,

 

Label1에 총 용량을 바이트로 출력합니다.

 

Label2에 남은 용량을 바이트로 출력합니다.

 

Label3에 BytesAvailableToCaller을 출력합니다.

 

어때요? 잘되나요? 오타 또는 틀린점 지적 받습니다.

 

* 바람개비님 제보.  감사합니다.

 

본 포스팅은 2011/01/29 21:06 에 작성되었으며, 2011/10/10 20:10에 이동되었습니다.