
フロッピーへアクセスするDLLを作っています。
環境は、Window NT4.0 SP5 & C です。
フロッピー上のファイルへのアクセスが終わり CloseHandleを実行する前に、(微妙なタイミングだとは思いますが)媒体がFDDから抜かれてしまった場合、CloseHandle実行時に次のメッセージが表示されることがあります。
|--------------------------------------------------------------------
|システムプロセス - ディスクがありません。 |
| ドライブにディスクがありません。ディスクをドライブ A:に挿入して下さい。|
| 中止(A) 再試行(R) 無視(I) |
|--------------------------------------------------------------------|
( ↑ ↑ ↑ 註:ボタンです。)
このメッセージを表示せずにCloseHandleを行う方法をご存知でしたらご教示下さい。(メッセージを表示することなく、強引にハンドルをクローズしたり、あるいは、CloseHandleを即 異常終了させるような方法はあるのでしょうか?)
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
CloseHandle()でダイアログが表示されているのではなく、もう少し前の WriteFile() などで表示されているのではないでしょうか? WriteFile()が終わって CloseHandle()の手前でドンピシャリFDを抜くというのは神業のような気がします。
試しに SetErrorMode(...) を CreateFile()より前に入れて試してみてもらえますか?
No.2
- 回答日時:
SetErrorMode(SEM_FAILCRITICALERRORS)でうまくいきませんかね?またはパラメータはもしかしたらSEM_NOOPENFILEERRORBOX かも…。
試していませんが…。致命的エラーをOSに任せず、エラーコードが返ってくるので該当メッセージが表示されず、自分でどうにかできると思うのですが…。その場合でも#1の方の言われるようにエラーを無視せず、なんらかのエラー処理は必要と思います。
回答ありがとうございます。
“まさしくこれだ!!!”と思ったのですが....
残念ながら、メッセージは表示されてしまいました。(T_T)
SEM_FAILCRITICALERRORS指定でも表示され、SEM_NOGPFAULTERRORBOX指定でも表示されてしまいました。
MSDNライブラリにあった4つの指定をすべて指定してみたのですが表示されてしまいました。(ダメモトでお礼1に書いた例外処理を(書き方に自信がなかったので)削除してやってみたのですがやはり表示されてしまいました。)
No.1
- 回答日時:
こんにちは。
itohhといいます。このダイアログが出ると言うことは、ファイルが正常にクローズしていないと言うことなので
次のときファイルが正常にオープンできないことがあります。
それでも、良いのでしょうか?
もし、良いのであれば、ファイルをオープンからCloseHandleまでの間を例外処理するようにすれば
ダイアログが出なくなるかもしれません。
ちょっと、試していないので憶測になりますが。
回答頂きありがとうございます。
次のときのファイルオープンが正常にいかなくても構いません。
とりあえず、ダイアログを表示せずCloseHandleを行いたいです。
例外処理の書き方に自信がないのですが、下記のように書いてみました。
が...残念ながらダイアログは表示されてしまいました。
catchの中にも入らないので、
例外処理の書き方に問題があるのでしょうか?御指摘頂ければ幸いです。
HANDLE hFD;
UINTuErrMode;
BOOLbRet;
BYTEbData[84480];
DWORDdwReadSize;
DWORDdwFileSize;
DWORDdwFilePoint;
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- USBメモリー・SDカード・フラッシュメモリー ウィンドーズ メディアプレーヤー でディスクへの書き込みが突然できなくなくなってしまいました。 2 2022/05/10 23:07
- 据え置き型ゲーム機 windows11で任天堂switchのSDカードをコピーするには 1 2022/04/06 19:47
- ドライブ・ストレージ vhdxファイルからのデータの取り出し方 4 2023/06/14 23:53
- デスクトップパソコン DVDドライブのCD、DVDディスクが認識されません 2 2022/08/22 00:19
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- その他(IT・Webサービス) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 1 2022/05/07 15:12
- Excel(エクセル) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 2 2022/05/07 17:16
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行すると メッセージボックスが表示されて okをク 4 2023/07/05 19:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
ExcelVBAで既に開いてるwordを...
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
データベースソフトのアクセス2...
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
gccを行ってもexeファイルが生...
-
NAS上のファイルの使用中が解除...
-
CSVファイルが開かれているかど...
-
VB6.0開発ソフトインストールで...
-
VB6 Dir関数で52エラー発生
-
DisplayAlertsブロパティで ”実...
-
至急
-
Vba ファイル書き込み時に書き...
-
すでにファイルが開かれている...
-
VBから参照できないCのDLLを使...
-
「アクティブ ユーザーが多すぎ...
-
排他ロックが掛かっているファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access テキストボックスの値取得
-
Returnに対するGoSubがありません
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
NAS上のファイルの使用中が解除...
-
アクセスのクエリでコンパイル...
-
VBでファイルが開かれているか...
-
ExcelVBAで既に開いてるwordを...
-
エクセルマクロでエラーの原因...
-
batファイルでレジストリキーの...
-
【COBOL】read文でエラー
-
VB6 Dir関数で52エラー発生
-
「アクティブ ユーザーが多すぎ...
-
データベースソフトのアクセス2...
-
VBから参照できないCのDLLを使...
-
DisplayAlertsブロパティで ”実...
-
Access2013にてドラッグ&ドロ...
-
ACCESS VBAでのインポート
-
すでにファイルが開かれている...
-
Vba ファイル書き込み時に書き...
おすすめ情報