
こんにちは。
よろしくお願いいたします。
次はソースの一部です。
ofstreamで定義した「OutFile」をオープンすると、aaa.tmp は作成されるのですが、オープンできずエラーメッセージを出力します。
何がおかしいのでしょうか?
どこが間違っているのでしょうか?
ofstream OutFile;
AnsiString asBuff;
asBuff = "C:\\aaa.tmp";
OutFile.open( asBuff.c_str() );
if( !OutFile ){
ShowMessage("エラー");
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
一応確認ですが, 「もともとそのファイルは存在しなかった」のですね?
ん~, なんだろ.... エラーの種類を知る方法ってなかったっけ....
ちなみに「NULL との比較」はしてませんよ>#1.
回答ありがとうございます。
>一応確認ですが, 「もともとそのファイルは存在しなかった」のですね?
はい、そうです。ファイルは存在してなくて、ファイルをopenした時に作成されます。
環境はボーランドC++Builder6.0 で、
if( !OutFile ){ と言う書き方はBCB6.0のHELPにも記載されていたのですが、そもそも間違いなのですか?
No.1
- 回答日時:
>オープンできずエラーメッセージを出力します。
>if( !OutFile ){
>ShowMessage("エラー");
>}
これ、明らかにおかしいでしょ。
ストリームオブジェクトをNULLかどうか比較しても、オープン出来たかどうかは判らない。
オープンに成功しても失敗しても「ストリームオブジェクトは何がしかの実体を持っていて、NULLになる事は有り得ない」から。
もしかして
FILE *ofp;
ofp = fopen("C:\\aaa.tmp","w");
if (!ofp) {
ShowMessage("エラー");
}
みたいに書けると勘違いしたかな?
こう書けるのは「fopenは失敗したらNULLを返す」からであって、ofstream::open()では、そうはいかない。
ofstream::open()は値を返さない。
その代わり、例外を送出してくるので、try...catch文で例外を捕まえ、例外処理に飛んできた時だけエラーだと判定すれば良い。
つまり「ofstream::open()のあとにif文があるのが変」って事。
なぜならopenの次の文に来るのは「オープンが成功した時だけ」だから。
逆にいうと「オープンに失敗した時は、openの次の文の所には来ない」ってこと。
なので、ShowMessageがある場所が変です。それを書く場所は「try...catch文のcatch節の所」だから。
回答ありがとうございます。
ボーランドC++Builder6.0 を使用していて、
if( !OutFile ){ と言う書き方はBCB6.0のHELPにも記載されていたのですが、そもそも間違いなのですか?
同様の書き方をしているサイトもいくつかあり、この事をどのように確認したらよいか悩んでします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Excel(エクセル) 週毎の集計 2 2023/08/04 16:56
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) VBAのエラーについて 2 2023/08/02 17:46
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
sys/time.hのインクルードがで...
-
VC++ includeファイルについて
-
不正なメモリ領域へのアクセス...
-
subまたはfunctionが定義されて...
-
入れ子になっている構造体配列...
-
VB2008 サービス「PrintSpooler...
-
VBAコンパイルエラーについて
-
ofstream について
-
左側がクラス、構造体、共用体...
-
C++での区切り記号
-
typedef定義型を使った関数につ...
-
VC++2010 expressでファイル操作
-
Borlandで組んだC+サンプルでエ...
-
C#で教えてください
-
CreateInstanceで例外発生
-
VisualStudio2008 セットアップ...
-
Access2002のコマンドボタンに...
-
関数から関数を呼ぶ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
ビルド失敗 指定されたファイ...
-
fortranでプログラムを実行する...
-
visual C++ でビルドの中止がで...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
バッチからsqlplusの接続エラー...
-
Visual Studioのstrcpy_sについて
-
DLL関数を使ったプログラム
-
キーの自動入力
-
RightとLeft関数のライブ...
-
BC30002: 型 'ListItem' が定義...
-
LPCWSTRとchar
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
sys/time.hのインクルードがで...
おすすめ情報