USBメモリに対してのFileSystemObjectについて

解決


@mogu  2007-04-03 03:44:04  No: 98457

いつも参考にさせていただいております。

ドライブの空き容量を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


通ってみた  2007-04-03 04:13:47  No: 98458

実際やってないのでどうなるかわかりませんが、取得した後でCドライブ辺りでダミー取得してみてはどうでしょう?


@mogu  2007-04-03 04:31:20  No: 98459

お返事ありがとうございます。

申し訳ありません、早とちりをしていました。
この関数の前にディレクトリが存在するかをDirできいていたのですが、
どうやらそこで掴んだ状態になっていたようです。
こちらもFileSystemObjectのFolderExistsをしようしたら、
取り外しすることができました。

Dirで掴んだ状態になるのが気になりますが、解決とします。


魔界の仮面弁士  2007-04-03 18:21:16  No: 98460

> FreeSpaceで取得しているのですが、
AvailableSpace の方が適切かも知れません。

多くの場合、両者は同じ値が返されますが、
  FreeSpace … ディスクの空き容量
  AvailableSpace … ディスクの空き容量のうち、利用可能なサイズ
という違いがあります。

> Dirで掴んだ状態になるのが気になりますが
Dir は引数なしで呼び出すと、前回の続きを返しますので、
それが「掴んだ状態」の原因になっていたのかも知れません。

で、この場合は、
  ・Dir 関数が空文字列を返すまで呼び出す。
  ・別のディレクトリ(App.Pathなど)に対して Dir を呼びなおす
などとすれば、解放されたのかも。(未確認)


@mogu  2007-04-03 19:08:41  No: 98461

魔界の仮面弁士さん、いつも回答を参考にさせてもらっております。

>FreeSpace … ディスクの空き容量
>AvailableSpace … ディスクの空き容量のうち、利用可能なサイズ
そのような違いがあるんですね。
私の求めているのは利用可能なサイズですので、
『AvailableSpace』の方が正しいですね。

>・別のディレクトリ(App.Pathなど)に対して Dir を呼びなおす
>などとすれば、解放されたのかも。(未確認)
App.Pathに対して呼びなおしてみたところ、取り外しができました。

よって気になった部分も解決しましたので、完全解決とします。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加