- PR -

OpenFileDialogでドライブへのハンドルが解放されない

1
投稿者投稿内容
toppo
ベテラン
会議室デビュー日: 2003/10/28
投稿数: 89
お住まい・勤務地: 東京・池袋
投稿日時: 2008-12-18 01:39
環境.NETFramework 1.1
言語 C#

タイトルの通りなのですが、
C#のプログラム中で、

OpenFileDialogから特定のファイルを読み込む処理を実装しています。
処理の内容は以下です。
1.OpenFileDialogを利用し、ユーザにXMLファイルを選択してもらう。
2.DataSetのReadXMLメソッドにて内容をDataSetに読み込む
3.DataSetを利用した処理がいろいろ。

で、問題は1でUSBメモリ(Eドライブとします)内のファイルを利用した場合です。
その場合、処理後に[ハードウェアの安全な取り外し]の操作から、
EドライブのUSBを取り外そうとしても、
「デバイス'汎用ボリューム'を今停止できません。....」と出てしまいます。

Process Explorer( http://technet.microsoft.com/ja-jp/sysinternals/bb896653(en-us).aspx )等で確認すると、
当該アプリケーションが、E:\をつかんでいるようでした。

ファイルに対するアクセス処理はもちろん終わっていますし、
クローズ処理も行っています。
(DataSetのReadXML(filePath) のメソッドは内部でclose処理を実装している。)

USBを取り外す為には以下のいずれかの手続きが必要です。
A.アプリケーションを終了させる。
B.再度OpenFileDialogを利用し、Eドライブ以外のドライブから
ファイルを読み取る処理をする。

Bの操作をすると、E:\のハンドルがつかまれなくなり、
新しく選択されたドライブのハンドルがつかまれ、
よって、USBを取り外す事ができるようになります。

ユーザとしては
「ファイルを取り込む処理は終わっているのに、
何で取り外せないの?」
となります。

AやBの手順なしに、ドライブへのハンドルを解放する方法はあるでしょうか?
AやBの手順なしに、複数のUSBメモリ内のファイルを連続して(抜き差ししながら)
扱う事は可能でしょうか?

ご教授いただけると幸いです。

P.S.
蛇足かもしれませんが、
[ハードウェアの安全な取り外し]の操作は当然行います。
それをなくしたいという主旨はありません。


[ メッセージ編集済み 編集者: toppo 編集日時 2008-12-18 01:40 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-12-18 09:25
ダイアログで開いたディレクトリにカレントディレクトリが移動するのが原因でしょう。
Environment.CurrentDirectory で他のディレクトリに設定するか、OpenFileDialog.RestoreDirectory プロパティでカレントディレクトリを元に戻すように設定しておくかすればいいかと思います。
toppo
ベテラン
会議室デビュー日: 2003/10/28
投稿数: 89
お住まい・勤務地: 東京・池袋
投稿日時: 2008-12-18 23:48
Hongliangさん
ありがとうございました。

目的のとおりできるようになりました。
1

スキルアップ/キャリアアップ(JOB@IT)