Win XP
VC++6 OR .NET2003
どちらも MFC WINアプリ ダイアログベース
アプリ概要
エディットBOXに文字列入力して、テキストファイルに単純追記していく
プログラムなのですが
その人それぞれの設計基準があるとは思いますが以下の質問させてください
ファイル出力のためのファイルポインタ(FILE *)は
MFCウィザードで生成された、DLG.HとDLG.CPPどちらに記述します
なお後付で記述する場合の話です
今はテストPGですが、後々には、ほかのPGと合体(ほかのPGの一部として)させ
たいです
CPPの場合であれば、fwriteを使う関数の中で記述しようと思ってます
ほかのPGの一部として動作させる場合、最低2つのクラスからこのダイアログクラスを
呼び出そうと思ってます
どうぞよろしくお願いします。
追加
1.fwriteを使う関数は、ファイルポインタを引数として受け取りたくないです
2.書き込みファイルパスは引数として受け取るのは可
訂正
>MFCウィザードで生成された、DLG.HとDLG.CPPどちらに記述します
↓
MFCウィザードで生成された、DLG.HとDLG.CPPどちらに記述しますか
内容からすると、私ならクラスの中に定義するのでDLG.Hに記述すると思います。
>1.fwriteを使う関数は、ファイルポインタを引数として受け取りたくないです
この条件が決めてです
FILE*の存在を利用者に知られたくないなら .cpp ですが。
--- foo.h ---
class foo {
public:
void save(std::string path) const;
...
}
--- foo.cpp ---
#icnlude <cstdio>
#include foo.h
void foo::save(std::string path) const {
FILE* fp = std::fopen(path.c_str(), w);
....
fclose(fp);
}
ファイルをOpenした状態で保持しておきたいかが鍵になりませんか?
ファイルをその都度Openしても良いなら、書き込み関数内に封じ込めた方が
すっきりすると思います。
少なくともそれ以外の場所でファイルポインタが云々考える必要が無いので。
ファイルをOpenした状態で保持しておきたいのであれば、
ダイアログクラスのヘッダファイルにprivate変数で定義するか、
ヘッダを提供したときにファイルポインターの存在を知られたくないなら
ソースファイルのグローバルにする手ですが、この場合は、関数内で記述する
と書かれているのでアウトですね。
そうなると、この場合ならヘッダファイルしかないですね。
επιστημηさん、PATIOさん ありがとうございます
この場合やはり「利用者のことを考え」cppで記述しようと思います
その場完結にしたいと思います
.H
に記述した場合、利用方法の誤りが発生しないとも限らないので
継承のされ方や、こちらの作り方しだいでは、ファイルオープンしっぱなしのまま
クラス終了する可能性があったものでしたから、まずはご相談させていただきました。
実際やることは無いと思うのですが、コンストラクタにファイルオープンを記述し
デストラクタでクローズ忘れなんて事故起こしちゃうかも?
なんて考えたりもしてました