
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=テストです。
No.2ベストアンサー
- 回答日時:
> どれにあたるのでしょうか?
エラーメッセージを100%信頼するのなら、
| 1.オープン時(コンストラクト時)のエラー
| ・既存ファイルを開こうとしたが、排他的に他プロセスが使用していた。
ですね。
--
ただ、この場合はそのファイルを開いている別のアプリケーションが、
MSDN - CFile::CFile
http://www.microsoft.com/japan/developer/library …
| CFile::shareDenyWrite
| 開かれたファイルは、他のプロセスからの書き込みのためのアクセスを拒否します。指定したファイルが他のプロセスにより互換モードまたは書き込みアクセスで開かれているときには、Create 関数は失敗します。
の排他モードでファイルを開いており、アクセスを禁止しているなどが原因じゃないかとも思います。
参考URL:http://www.microsoft.com/japan/developer/library …
No.1
- 回答日時:
1.オープン時(コンストラクト時)のエラー
・ライブラリ内部でメモリ不足が起きた。
・既存ファイルを開こうとしたが、アクセス権が無かった。
・既存ファイルを開こうとしたが、排他的に他プロセスが使用していた。
・既存ファイルを書き込みモードで開こうとしたが、リードオンリー属性が付いていた。
・新規ファイルを書き込みモードで作成しようとしたが、作成したいフォルダにアクセス権が無かった。
2.シーク時のエラー
・ライブラリ内部でメモリ不足が起きた。
・アクセスしているハンドルが、コンソールやシリアルデバイスなど、シーク出来ない(サイズ概念の無い)ストリーム型ハンドルだった。
・アクセス先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。
3.ライト時のエラー
・ライブラリ内部でメモリ不足が起きた。
・ディスクフルが発生した。
・ライトした先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。
4.クローズ時のエラー
・ライブラリ内部でメモリ不足が起きた。
・クローズ前にフォルダへの書き込みアクセス権が変更され、ファイルの更新日時を変更出来なくなった。
・アクセス先がネットワークドライブか、ネットワークドライブをマップしたドライブだった時に、ネットワーク障害が発生した。
以上のように、どの行でもエラーが発生する可能性があります。
この回答への補足
アドバイスありがとうございます。
エラーが発生した際のメッセージを見てみたら
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
と表示されていました。
この場合、どれに上記状況のどれにあたるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
データベースソフトのアクセス2...
-
batファイルでレジストリキーの...
-
エクセルで質問です。 ハイパー...
-
エクセルマクロでエラーの原因...
-
Returnに対するGoSubがありません
-
DisplayAlertsブロパティで ”実...
-
fcloseで発生するエラーについて。
-
Excel 2003 のエラーメッセージ
-
VB6 Dir関数で52エラー発生
-
【COBOL】read文でエラー
-
fgets関数のEOFの扱い方について
-
Excel VBAのApplication.Execut...
-
ExcelVBAで既に開いてるwordを...
-
OUTLOOK VBA 指定フォルダ内の...
-
VBAでDLLが見つからないエラー
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
FTPの送信結果を検知したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
エクセルで質問です。 ハイパー...
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
NAS上のファイルの使用中が解除...
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
ExcelVBAで既に開いてるwordを...
-
Returnに対するGoSubがありません
-
VB6 Dir関数で52エラー発生
-
VBでファイルが開かれているか...
-
データベースソフトのアクセス2...
-
エクセルマクロでエラーの原因...
-
fcloseで発生するエラーについて。
-
batファイルでレジストリキーの...
-
FORTRANの実行エラーについて
-
VBから参照できないCのDLLを使...
-
【COBOL】read文でエラー
-
DisplayAlertsブロパティで ”実...
おすすめ情報