by ゲスト » 2005年8月23日(火) 14:50
> GetDiskFreeSpaceEx(GetDiskFreeSpaceでも良いんだけど…)を使ってドライブの(空き)容量を取得、KBやMB、GBに変換して表示させようとしています。
>
> しかし、BからKB(MB)(GB)への計算方法が分からず、悪戦苦闘しています。
>
> 以下が、適当に作った容量計算方法です。(一部おかしい所もあるかもしれませんが、気にしないでください(^^;;;)
>
>
コード: 全て選択
Sub MainWnd_CommandButton2_Click()
> Dim DSKFRE As ULARGE_INTEGER
> Dim DSKFRE2 As ULARGE_INTEGER
> Dim DSKFRE3 As ULARGE_INTEGER
> /*Dim Secs As Dword
> Dim SecSize As Dword
> Dim FreeClusters As Dword
> Dim Clusters As Dword*/
> 'If GetDiskFreeSpace("C:\",VarPtr(Secs),VarPtr(SecSize),VarPtr(FreeClusters),VarPtr(Clusters))=FALSE THEN MessageBox(0,0,0,0)
> If GetDiskFreeSpaceEx("C:\",DSKFRE,DSKFRE2,DSKFRE3)=FALSE Then MessageBox(0,0,0,0)
> 'MessageBox(0,Str$(DSKFRE.HighPart),Str$(DSKFRE.LowPart),0)
> Dim a As Int64
> a=DSKFRE3.LowPart
> 'Dim a As DWord
> 'a=FreeClusters
> If a < 1000 Then 'B
> MessageBox(0,Str$(a)+"B",0,0)
> ElseIf a < 1000000 Then 'KB
> MessageBox(0,Str$(a)+"KB",0,0)
> ElseIf a < 1000000000 Then 'MB
> /* Do
> If a<1000 Then ExitDO
> a=a/1024
> Loop*/
> a=a/1024/1024
> MessageBox(0,Str$(a)+"MB",0,0)
> ElseIf a < 1000000000000 Then 'GB
> /* Do
> MessageBox(0,Str$(a)+"GB",0,0)
> If a<1000 Then ExitDO
> a=(a/1024/1024)
> Loop*/
> a=a/1024/1024/1024
> a=a*2
> MessageBox(0,Str$(a)+"GB",0,0)
> ElseIf a < 1000000000000000 Then 'TB
> MessageBox(0,Str$(a)+"TB",0,0)
> End If
> End Sub
>
>
> 適当に作ったので、上記の形式でなくても良いので、良い方法はありませんでしょうか?
もう少し簡単にできると思います。
Sub MainWnd_CommandButton2_Click()
Dim DSKFRE As QWord
Dim DSKFRE2 As QWord
Dim DSKFRE3 As QWord
GetDiskFreeSpaceEx("C:\",ByVal VarPtr(DSKFRE),ByVal VarPtr(DSKFRE2),ByVal VarPtr(DSKFRE3))
MessageBox(0,Str$(DSKFRE3)+"B","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024)+"KB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024)+"MB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024/1024)+"GB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024/1024/1024)+"TB","ドライブ空き容量",0)
End Sub
[quote]
> GetDiskFreeSpaceEx(GetDiskFreeSpaceでも良いんだけど…)を使ってドライブの(空き)容量を取得、KBやMB、GBに変換して表示させようとしています。
>
> しかし、BからKB(MB)(GB)への計算方法が分からず、悪戦苦闘しています。
>
> 以下が、適当に作った容量計算方法です。(一部おかしい所もあるかもしれませんが、気にしないでください(^^;;;)
>
> [code]Sub MainWnd_CommandButton2_Click()
> Dim DSKFRE As ULARGE_INTEGER
> Dim DSKFRE2 As ULARGE_INTEGER
> Dim DSKFRE3 As ULARGE_INTEGER
> /*Dim Secs As Dword
> Dim SecSize As Dword
> Dim FreeClusters As Dword
> Dim Clusters As Dword*/
> 'If GetDiskFreeSpace("C:\",VarPtr(Secs),VarPtr(SecSize),VarPtr(FreeClusters),VarPtr(Clusters))=FALSE THEN MessageBox(0,0,0,0)
> If GetDiskFreeSpaceEx("C:\",DSKFRE,DSKFRE2,DSKFRE3)=FALSE Then MessageBox(0,0,0,0)
> 'MessageBox(0,Str$(DSKFRE.HighPart),Str$(DSKFRE.LowPart),0)
> Dim a As Int64
> a=DSKFRE3.LowPart
> 'Dim a As DWord
> 'a=FreeClusters
> If a < 1000 Then 'B
> MessageBox(0,Str$(a)+"B",0,0)
> ElseIf a < 1000000 Then 'KB
> MessageBox(0,Str$(a)+"KB",0,0)
> ElseIf a < 1000000000 Then 'MB
> /* Do
> If a<1000 Then ExitDO
> a=a/1024
> Loop*/
> a=a/1024/1024
> MessageBox(0,Str$(a)+"MB",0,0)
> ElseIf a < 1000000000000 Then 'GB
> /* Do
> MessageBox(0,Str$(a)+"GB",0,0)
> If a<1000 Then ExitDO
> a=(a/1024/1024)
> Loop*/
> a=a/1024/1024/1024
> a=a*2
> MessageBox(0,Str$(a)+"GB",0,0)
> ElseIf a < 1000000000000000 Then 'TB
> MessageBox(0,Str$(a)+"TB",0,0)
> End If
> End Sub
> [/code]
>
> 適当に作ったので、上記の形式でなくても良いので、良い方法はありませんでしょうか?
[/quote]
もう少し簡単にできると思います。
Sub MainWnd_CommandButton2_Click()
Dim DSKFRE As QWord
Dim DSKFRE2 As QWord
Dim DSKFRE3 As QWord
GetDiskFreeSpaceEx("C:\",ByVal VarPtr(DSKFRE),ByVal VarPtr(DSKFRE2),ByVal VarPtr(DSKFRE3))
MessageBox(0,Str$(DSKFRE3)+"B","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024)+"KB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024)+"MB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024/1024)+"GB","ドライブ空き容量",0)
MessageBox(0,Str$(DSKFRE3/1024/1024/1024/1024)+"TB","ドライブ空き容量",0)
End Sub