GetFreeSpace関数を使用してCD-RWの空き要領を取得しようとしたのですが
何故かうまくいきません。
CD-RWに何も書かれていない場合、空き要領が0と認識されてしまいます。
CD-RWをドライブにセットしてあるかどうか判る方法もわからず・・・。
どなたか教えてください。
VB5で開発してます。XP環境です。
よろしくお願いします!
ちなみに、ドライブに入っているCDがCD−RなのかCD−RWなのか判別する方法ってあるのでしょうか?
GetFreespace(lpRootPathName,lpSectorsPerCluster,lpBytesPerSector,
lpNumberOfFreeClusters,lpTtoalNumberOfClusters)関数を使用してみたの
ですが、空き容量を算出するために必要な引数lpNumberOfFreeClusters
(フリークラスタ数)が0で返ってきます。
で、ドライブの容量=CDの使用容量となります。
(650MBのCDであっても100MB使用していたら100MBと返ります)
CD-ROMドライブのみ生じる現象です。
FDやCFドライブの容量は正しく取得できています。
何故なのでしょう?
> CD-ROMドライブのみ生じる現象です。
仕様という事で。(^_^;)
> CD−RなのかCD−RWなのか判別
IMAPIを使えば取得できるかも。(未確認)
> 空き要領を取得
FolderオブジェクトのGetDetailsOfメソッドで取得できるかも。
以下、手抜きコード。
Option Explicit
Private Sub Form_Load()
'CD-RWドライブを指定
MsgBox GetFreeArea("E:\")
End Sub
Private Function GetFreeArea(ByVal Drive As String) As String
Dim S As Object
Dim F As Object
Dim FI As Object
If Len(Drive) = 1 Then
Drive = Drive & ":"
End If
If Right(Drive, 1) <> "\" Then
Drive = Drive & "\"
End If
On Error Resume Next
Set S = CreateObject("Shell.Application")
Set F = S.NameSpace(CVar(Drive))
Set FI = F.Items().Item()
GetFreeArea = F.ParentFolder.GetDetailsOf(FI, 3)
On Error GoTo 0
Set FI = Nothing
Set F = Nothing
Set S = Nothing
End Function
できましたヾ(^-^)ゞ
ありがとうございます♪
>> CD-ROMドライブのみ生じる現象です。
>>仕様という事で。(^_^;)
ん?仕様なのですか?
仮面弁士さんのGetFreeAreaを使用してみたのですが
空き容量(サイズ)ではなく”空き領域”という文字が返ってきました。
・・・ほんとに「解決」したのですか?
CD-RWドライブで試さなかったので上記のような
結果となったようです。
CD-RWドライブで試したら上手くいきました。
ツイート | ![]() |