重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C++の処理で分からないことがあります。
アドバイスを頂けますようよろしくお願い致します。

以下のプログラムがある場合、
どのような時にエラー処理が実行されるのでしょうか?
例えば、書き込み対象のファイル「C:\WORK\20060508.txt」が既に秀丸等で開かれている状態でもエラーは発生するのでしょうか?

TRY
{
CFile file(strLogFilePath, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate);
file.SeekToEnd();
file.Write(strText, strText.GetLength());
file.Close();
}
CATCH(CFileException, e)
{
// エラー処理
}

※補足
strLogFilePath=C:\WORK\20060508.txt
strText=テストです。

A 回答 (2件)

> どれにあたるのでしょうか?



エラーメッセージを100%信頼するのなら、

| 1.オープン時(コンストラクト時)のエラー
| ・既存ファイルを開こうとしたが、排他的に他プロセスが使用していた。

ですね。

--
ただ、この場合はそのファイルを開いている別のアプリケーションが、

MSDN - CFile::CFile
http://www.microsoft.com/japan/developer/library …

| CFile::shareDenyWrite
| 開かれたファイルは、他のプロセスからの書き込みのためのアクセスを拒否します。指定したファイルが他のプロセスにより互換モードまたは書き込みアクセスで開かれているときには、Create 関数は失敗します。

の排他モードでファイルを開いており、アクセスを禁止しているなどが原因じゃないかとも思います。

参考URL:http://www.microsoft.com/japan/developer/library …
    • good
    • 0

1.オープン時(コンストラクト時)のエラー


・ライブラリ内部でメモリ不足が起きた。
・既存ファイルを開こうとしたが、アクセス権が無かった。
・既存ファイルを開こうとしたが、排他的に他プロセスが使用していた。
・既存ファイルを書き込みモードで開こうとしたが、リードオンリー属性が付いていた。
・新規ファイルを書き込みモードで作成しようとしたが、作成したいフォルダにアクセス権が無かった。

2.シーク時のエラー
・ライブラリ内部でメモリ不足が起きた。
・アクセスしているハンドルが、コンソールやシリアルデバイスなど、シーク出来ない(サイズ概念の無い)ストリーム型ハンドルだった。
・アクセス先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。

3.ライト時のエラー
・ライブラリ内部でメモリ不足が起きた。
・ディスクフルが発生した。
・ライトした先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。

4.クローズ時のエラー
・ライブラリ内部でメモリ不足が起きた。
・クローズ前にフォルダへの書き込みアクセス権が変更され、ファイルの更新日時を変更出来なくなった。
・アクセス先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。

以上のように、どの行でもエラーが発生する可能性があります。

この回答への補足

アドバイスありがとうございます。
エラーが発生した際のメッセージを見てみたら
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
と表示されていました。
この場合、どれに上記状況のどれにあたるのでしょうか?

補足日時:2006/05/09 15:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!