• 締切済み

フロッピー上のファイルクローズ時のメッセージ表示について

フロッピーへアクセスするDLLを作っています。 環境は、Window NT4.0 SP5 & C です。 フロッピー上のファイルへのアクセスが終わり CloseHandleを実行する前に、(微妙なタイミングだとは思いますが)媒体がFDDから抜かれてしまった場合、CloseHandle実行時に次のメッセージが表示されることがあります。 |-------------------------------------------------------------------- |システムプロセス - ディスクがありません。               | | ドライブにディスクがありません。ディスクをドライブ A:に挿入して下さい。| |   中止(A) 再試行(R) 無視(I)                    | |--------------------------------------------------------------------|    ( ↑    ↑    ↑   註:ボタンです。) このメッセージを表示せずにCloseHandleを行う方法をご存知でしたらご教示下さい。(メッセージを表示することなく、強引にハンドルをクローズしたり、あるいは、CloseHandleを即 異常終了させるような方法はあるのでしょうか?) よろしくお願いします。

みんなの回答

回答No.3

CloseHandle()でダイアログが表示されているのではなく、もう少し前の WriteFile() などで表示されているのではないでしょうか? WriteFile()が終わって CloseHandle()の手前でドンピシャリFDを抜くというのは神業のような気がします。 試しに SetErrorMode(...) を CreateFile()より前に入れて試してみてもらえますか?

回答No.2

SetErrorMode(SEM_FAILCRITICALERRORS)でうまくいきませんかね?またはパラメータはもしかしたらSEM_NOOPENFILEERRORBOX かも…。試していませんが…。 致命的エラーをOSに任せず、エラーコードが返ってくるので該当メッセージが表示されず、自分でどうにかできると思うのですが…。その場合でも#1の方の言われるようにエラーを無視せず、なんらかのエラー処理は必要と思います。

bow2001
質問者

お礼

回答ありがとうございます。 “まさしくこれだ!!!”と思ったのですが.... 残念ながら、メッセージは表示されてしまいました。(T_T) SEM_FAILCRITICALERRORS指定でも表示され、SEM_NOGPFAULTERRORBOX指定でも表示されてしまいました。 MSDNライブラリにあった4つの指定をすべて指定してみたのですが表示されてしまいました。(ダメモトでお礼1に書いた例外処理を(書き方に自信がなかったので)削除してやってみたのですがやはり表示されてしまいました。)

  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 このダイアログが出ると言うことは、ファイルが正常にクローズしていないと言うことなので 次のときファイルが正常にオープンできないことがあります。 それでも、良いのでしょうか? もし、良いのであれば、ファイルをオープンからCloseHandleまでの間を例外処理するようにすれば ダイアログが出なくなるかもしれません。 ちょっと、試していないので憶測になりますが。

bow2001
質問者

お礼

回答頂きありがとうございます。 次のときのファイルオープンが正常にいかなくても構いません。 とりあえず、ダイアログを表示せずCloseHandleを行いたいです。 例外処理の書き方に自信がないのですが、下記のように書いてみました。 が...残念ながらダイアログは表示されてしまいました。 catchの中にも入らないので、 例外処理の書き方に問題があるのでしょうか?御指摘頂ければ幸いです。 HANDLE hFD; UINT uErrMode; BOOL bRet; BYTE bData[84480]; DWORD dwReadSize; DWORD dwFileSize; DWORD dwFilePoint; try {  hFD = CreateFile( "\\\\.\\a:\\aaa.doc",            GENERIC_READ | GENERIC_WRITE,            FILE_SHARE_READ | FILE_SHARE_WRITE,            NULL,            OPEN_EXISTING,            FILE_ATTRIBUTE_NORMAL,            NULL );  if( hFD == INVALID_HANDLE_VALUE ){   // エラー  }  dwFileSize = GetFileSize( hFD, NULL );  bRet = ReadFile( hFD, (LPVOID)bData, dwFileSize, &dwReadSize, NULL );  if( bRet == FALSE ){   // エラー  }  dwFilePoint = SetFilePointer( hFD, 0, NULL, FILE_BEGIN );  dwFileSize += 10;  bRet = WriteFile( hFD, (LPVOID)bData, dwFileSize, &dwReadSize, NULL );  if( bRet == FALSE ){   // エラー  }  uErrMode = SetErrorMode( SEM_NOOPENFILEERRORBOX | SEM_NOALIGNMENTFAULTEXCEPT | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX );  if( !CloseHandle( hFD ) ){   throw "Test";  }  SetErrorMode( uErrMode ); } catch(char * str) {  SetErrorMode( uErrMode );  // CloseHandleエラー }

関連するQ&A

  • フロッピーディスクが使えません

    突然フロッピーディスクが使えなくなりました フロッピーディスクドライブにフロッピーディスクを挿入しても 「A:\にアクセスできません。デバイスの準備ができていません」 と表示されます。 考えられる原因を教えてください。 当方のPCはDynaBook250PX、FDDは当初より搭載されているものです 追加情報が必要な場合もよろしくお願いします

  • フロッピーが使えなくなってしまいました

    外付けのフロッピーディスクドライブを使っていました。USB接続が多くなったのでハブを使用し始め、しばらくはフロッピーも使えていました。が、しばらくして突然「A\ にアクセスできません。」というエラーがでるようになり、フロッピーが使えません。ハブが悪いのかと思いハブの使用はやめ、PCに直接つなぐようにしました。それでもダメなのでFDDが壊れたのかと思い新しいもの購入してみましたが、やはり同じエラーがでてしまいます。どのようにすればよいのでしょうか?

  • フロッピーディスクドライブ (FDD) へのアクセスを繰り返すんですが

    フロッピーディスクドライブ (FDD) へのアクセスを繰り返すんですが…なんとか出来ないんでしょうか? windowsXP(FMV-BlBLO NB18D/L)を使っています。 PC本体の手前で青く光ってる「状態表示LCD」という欄で、 「フロッピーディスクアクセス表示」というフロッピーディスクのマークが付いてたり消えたりしています。 その度にPC本体からガガッという音がして落ち着きません。 調べたらブラウザクラッシャーの可能性があるみたいです…。 対策としては。 ・フロッピーディスクドライブのドライブ名をA以外にする ・最近使ったファイルを削除 ファイルは削除したんですが、効果はありませんでした。 ドライブ名をA意外にする方法は分かりません。 やり方を教えて下さい。 あと、思ったことがあるんですが…。 フロッピーディスク機能をPCから削除してしまえば良いんじゃないかと思っているんですが。 どうでしょうか? マイコンピュターの中に3.5インチFD(A)というのを消せ良いんじゃないですかね? 自分ではどうにも出来ないので対策法を教えて下さい。 回答宜しくお願いします。

  • フロッピーディスク

    フロッピーディスクが突然使えなくなりました。3.5”フロッピーを入れてファイルを開こうとすると、A Driveに一度アクセスしますが、「ドライブAのディスクはフォーマットされていません。いますぐフォーマットしますか」のメッセージが出ます。ドライブAが読み取り不良になる前にどんな事をしたのか詳細を記憶していませんが、CD-RのソフトをInstallしようとして、失敗したのは記憶しています。どなたか心当たりがあるかた解決法を教えてください。Excelのデータだけ入っているフロッピーは開きます。宜しくお願いします。 

  • フロッピーが読めない

    「A:\システムは指定されたデイスから読み取れません」というメッセージが表示され、フロッピーの内容が読めません。(1)どのフロッピーでも同じ現象ですので、ディスク自体の問題ではありません。(2)LEDは点灯しドライブ自体は動いています(3)プロパティでディスクの容量等は表示されます。WIN98、NECのVALUESTARです

  • フロッピーに入っているファイルが開けません

    カテゴリーがこちらで正しいか少々不安ですが・・・。 先程、ワードを立ち上げ、開く→3.5インチフロッピーディスクといつもの手順でフロッピーに入っているファイルを開こうとしたところ、「このディスクは認識できません、フォーマットされていない可能性があります」、「ドライブAが正しくありません。有効なドライブ文字を入れて下さい」などと表示が出てファイルが開けません。 どうなってしまっているのでしょうか?解決法とエラーの理由を教えて下さい。

  • フロッピードライブが認識できない

    突然、フロッピーが認識できません。フロッピーを入れても、Aドライブにディスクを挿入してくださいとエラーメッセージが表示されます。ディスクトップのパソコンで内蔵型です。クリーニング用のフロッピーも認識しません。ドライブが壊れているのでしょうか?外付けのフロッピードライブを購入したほうがよいですか?

  • フロッピーが入っているかどうかのチェック

    フロッピードライブにフロッピーが入っているかどうかのチェックがJAVAで出来なくて困っています。具体的には、会社のマシン(英語NT4.0,英語JDK1.2.2) でjava.io.File.listRoots() に a:\\ が含まれてくるので new java.io.File("a:\\").exists() を行うとフロッピーが入っていないと言うメッセージボックスが(モーダルで)でて、Abort か Ignore のボタンを押さないと処理が先に進まなくなってしまいます(結果はfalse が帰ってくる)。このメッセージボックスを出さずにフロッピーが入っているかをチェックしたいのです。 実は家(日本語Win98,日本語対応(?)JDK1.2.2)で同じ事を行うとメッセージボックスは出ず、素直に false が帰ってきて、こちらは問題がないのです。会社のマシンで動くようにしたいのですが何か VM の設定でもあるのでしょうか。ちなみに CD-ROM ドライブに対しては問題ありませんでした。 NT上でJAVAのプロセスを走らせてリモートからアクセスさせる事したいと思っており、このチェックが出来ないとフロッピーへのアクセスをあきらめなければなりません。何かアドバイスなどあればお願いします。

  • フロッピーディスクを入れているのに・・・

    昨日までなんともなかったのですが、さっきからパソコンの調子が悪いのです。 ご存知の方がいらっしゃいましたら、教えてください。 フロッピーディスクを入れているのに、「3,5インチFD(A;)」を開くと、「Aドライブにディスクを挿入してください」というメッセージが表示されてしまいます。 いくつか試してみましたが、どのフロッピーディスクでも同じ結果でした。 これではディスク内のデータが開けません。 作業ができなくて困っています。 お願いします!!

  • FDDが1枚目のフロッピーディスクしか読んでくれない

    こんにちは。 早速なんですがちょっと困ったことがあります。 FDDが、どうも1枚目のフロッピーディスクしか読んでくれない のです。 Windows98の起動ディスクなど、2枚以上のフロッピーディスクを使う ときには困ってしまうのです。 「2枚目のフロッピーを入れてください」とメッセージが出たあと、 2枚目を入れてもまた同じ 「2枚目のフロッピーを入れてください」と出るのです。 エクスプローラーで調べてみると、どうも1枚目の内容を ずっと覚えたままになっているようです。 FDDを取り替えてみましたが、同じ症状が出ます。 アドバイスをお願いします。

専門家に質問してみよう