結局、
ドキュメントクラスの Serialize 関数の CArchive オブジェクトを使って、
CFile* fp = ar.GetFile();
CString strPath = fp->GetFilePath();
でファイルを読み込めるということですよね?
うーん、この場合は少し違います。
ファイルのパスを取得したいということでしたが、
CArchive クラスにはそれらしきものが見当たらなかったので(あったらごめんなさい)、
とりあえず CFile オブジェクトへのポインタを取得して、
そこからファイルのパスを取得しようということです。
では別にファイルopenしなければならないのですか?
いえ、Serialize 関数の引数に CArchive& ar ってのがありますよね?
この関数に入ってきた時点ですでにOpen されているので、
そのまま ar を使ってファイルアクセスすればいいです。
すいません・・arのあとはどんな風にかけばいいのですか?
ファイルは特定してないんですけど?
えっと、実行してみるのが一番手っ取り早いんですが、
Serialize 関数が呼ばれる前に CFileDialog が自動的に呼ばれますので、
そのときにファイルを指定することになります。
すいません、ちょっとわかりにくいです・・
とりあえず実行してみましょう。
聞くより、自分で見たほうが早いです。
MFC の内部処理で Serialize の前に ファイルダイアログが呼ばれますから。
その情報が CArchive& ar に入ってますので、ファイルの開閉は特に気にしないでいいです。
なので Serialize 関数内ではファイルの読み書きの処理だけを実装すればいいです。
すいません、実行とかしたんですけど、何を書いていいかわからないです・・
ar を使ってファイルアクセスするのはわかるんですけど
教えてください
上に はおさんがコードを示してくれていますよ。
あとは、MSDNとかを使って調べましょう。
#自分で調べるということも重要ですよ。
#MSDNの方が、遥かに詳しく教えてくれます。
テキスト以外はどう作るのですか
テキスト形式以外のファイルを読もうとしているのでしょうか・・。
もし、バイナリ形式ファイルのフォーマットがint型のデータが4つであった場合は
<読み込み時>
int n1,n2,n3,n4;
ar >> n1;
ar >> n2;
ar >> n3;
ar >> n4;
となります。
ちなみにこれは蛇足なのですがCArchiveにはオープンしたファイルの情報はあります。
とーぜんフルパスもはいってます。
VC++でいままでプログラミングしたことありますか?
ファイル入出力に基本的な動きを知っていますか?
知らなければデバッガーでOnOpenDocument()をずっと奥のほうまで追っかけてみてください。
どのタイミングでファイルダイアログが表示されて、どのようにファイルがオープンされている
かわかるはずです。
なにか調べましたか? 何か手元にVC++に関する本は持っていますか?
MSDNはインストールされていますか?
調べている様子がまったく伺えないような感じなのですが・・・。
ちなみに私はヒントはあたえますがソースコードをそのまま書く主義じゃないので。
ファイルはどんなファイルでも読めるようにしたい・・・んなことないよねー。
でも、「ファイルダイアログはつけない」って言ってるし、何がしたいんだろ。わかんねー。
表題の
>ファイルのフルパスを取得する
は解決しているんですよね。
はおさんのかかれている通り、一体何をしたいのですか?
もしかして何かの課題ですか?
#それ以前に、ネットで質問するという立場での書式が
#間違っていると思いますが。頑張ってくださいね。