プログラムで、USBメモリ内のテキストファイルを読み込むのですが、
読み込んだ後に、常駐トレイのUSBメモリをはずそうとすると、プログラムが
つかんでいるようで、プログラムを終了させないとはずせません。
プログラム内ではテキストファイルのオープン、クローズくらいしかしてい
ないのですが、何が原因なのでしょうか?
どなたか宜しくお願い致します。
ダイアログ使ってますか?
使っているならファイルを開いた後にダイアログの初期フォルダを
C:\等USB以外ににすることで回避されたと思いますよ。
通り巣鴨さん回答ありがとうございます。
ダイアログは使用していません。
iniファイルにパス(例. E:\)を設定し、そのパスをPublic宣言した変数に持たせています。
あとDir関数を使用(TFilE = Dir(TDiR))し、変数にパスを格納してますが関係ないですよね?
関係ありますよ。
たとえば、"C:\VB" というディレクトリに、"ascii" という
ファイルが一つだけ配置してあったとして、その状態で
Debug.Print Dir("C:\vb\ascii")
のようなコードを実行すると、"C:\VB" が使用中となり、
ディレクトリを削除する事ができなくなります。
なお、このディレクトリのロック状態を解除するには、
空文字が返されるまで Dir を繰り返し呼び出すか、もしくは、
別のフォルダ(たとえば、App.Path)を Dir しなおせば OK です。
魔界の仮面弁士さん、ありがとうございます。
ローカルのパスをDIRすることで解決致しました。
もう一つ質問なのですが、USBのパスを掴んだままexeを終了させると
タスクマネージャのプロセスにexeが残ったままになることはありますか?
それはありません。
残ってしまうようならば、プログラム側に問題があるのだと思います。
たとえば、非表示のフォームが残っていたりはしませんか?
終了処理の直前(もしくは、FormのUnloadイベントなど)に、
MsgBox DoEvents '表示されているフォームの数
MsgBox Forms.Count 'ロードされているフォームの数(表示/非表示を問わない)
のようなコードを置いて、チェックしてみてください。
(両者が異なる値を返すようであれば、非表示のフォームが残っています)
またまた回答ありがとうございます。
まさしくその通りでした。
MDIフォームを使用していましたので、親を落とせば子も落ちると勝手に
思い込んでいました。
解決時のチェックを忘れていました。
通り巣鴨さん、魔界の仮面弁士さん回答ありがとうございました。
| ツイート |
|