いつも参考にさせていただいております。
ドライブの空き容量をFileSystemObjectのFreeSpaceで取得しているのですが、
USBメモリに対して取得すると、その後アプリを閉じるまで正常に取り外しできずに困っています。
USBメモリをつかんだままになっているイメージなのかなと思うのですが、
オブジェクトのNothing以外に何か必要なのでしょうか?
宜しくお願いします。
以下ソース
Dim objFS As New FileSystemObject
Dim objDrive As Drive
Dim strDrive As String
Set objFS = CreateObject("Scripting.FileSystemObject")
strDrive = objFS.GetDriveName(DriveName)
Set objDrive = objFS.GetDrive(strDrive)
関数リターン = objDrive.FreeSpace / 1024
Set objDrive = Nothing
Set objFS = Nothing
実際やってないのでどうなるかわかりませんが、取得した後でCドライブ辺りでダミー取得してみてはどうでしょう?
お返事ありがとうございます。
申し訳ありません、早とちりをしていました。
この関数の前にディレクトリが存在するかをDirできいていたのですが、
どうやらそこで掴んだ状態になっていたようです。
こちらもFileSystemObjectのFolderExistsをしようしたら、
取り外しすることができました。
Dirで掴んだ状態になるのが気になりますが、解決とします。
> FreeSpaceで取得しているのですが、
AvailableSpace の方が適切かも知れません。
多くの場合、両者は同じ値が返されますが、
FreeSpace … ディスクの空き容量
AvailableSpace … ディスクの空き容量のうち、利用可能なサイズ
という違いがあります。
> Dirで掴んだ状態になるのが気になりますが
Dir は引数なしで呼び出すと、前回の続きを返しますので、
それが「掴んだ状態」の原因になっていたのかも知れません。
で、この場合は、
・Dir 関数が空文字列を返すまで呼び出す。
・別のディレクトリ(App.Pathなど)に対して Dir を呼びなおす
などとすれば、解放されたのかも。(未確認)
魔界の仮面弁士さん、いつも回答を参考にさせてもらっております。
>FreeSpace … ディスクの空き容量
>AvailableSpace … ディスクの空き容量のうち、利用可能なサイズ
そのような違いがあるんですね。
私の求めているのは利用可能なサイズですので、
『AvailableSpace』の方が正しいですね。
>・別のディレクトリ(App.Pathなど)に対して Dir を呼びなおす
>などとすれば、解放されたのかも。(未確認)
App.Pathに対して呼びなおしてみたところ、取り外しができました。
よって気になった部分も解決しましたので、完全解決とします。
ありがとうございました。
ツイート | ![]() |