こんにちはm(__)m
私は今Visual C++2005 Express Edition Beta2を使っているものです。
まだ初心者なので段階をおっている最中です。
ファイルをオープンして中身を表示させる事はできました。
それで次にファイルの例えば3行目を表示させるにはどうしたらよいでしょうか。
SetFilePonterのようなものでしょうか・・・??
どうかお願いします。
1行目、2行目を読み飛ばして下さい。
> ファイルをオープンして中身を表示させる事はできました。
これをどのようにしたのかが解ればもう少し具体的に言えるのですが。
多分、テキストファイルを読んで表示しているのではないかと思うのですが、
テキストファイルの場合、改行があると行が切り替わりますからファイル内の改行の位置が
わからないとSetFilePonter等で位置を指定することはできないと思います。
tibさんが書かれているように中身を読み込んでいって行の区切りを判別しながら、
1行目、2行目を読み飛ばすしかないと思います。テキストファイルの一行単位で読み込む
関数があるのでそれを使って不要な行を読み飛ばすのが一番簡単でしょう。
ファイルの読み込みは
hFile = CreateFile(_T(c:/sample.txt),GENERIC_READ,0,NULL,OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
ReadFile(hFile,Buff,sizeof(Buff),&Dwd,NULL);
ret = MessageBox(hWnd,Buff,にゃーす,MB_YESNO);
のように行いました。
その一行単位で読み込む関数の名前だけで良いので教えてくれませんか??
getline関数の事でしょうか。
できれば使い方も失礼ですが簡単でよいのでお願いします
> その一行単位で読み込む関数の名前だけで良いので教えてくれませんか??
CreateFileを使ったファイルの読込みの場合、行という概念は持っていません。
ReadFileで取得したBuffから改行文字を探して行を認識することになります。
C言語の標準関数に fgets というのがあります。
これは fopen で取得したFILEポインタ型変数に対して使えます。
C++の機能を使っていい場合は、std::getlineとかを利用すればいいです。
> その一行単位で読み込む関数の名前だけで良いので教えてくれませんか??
CStdioFile::ReadString()
C++よりはCっぽくなりますが、
fopen() ~ fgets() ~ fclose()
という手もあります。
上の例でReadFile()により表示したい部分が確実に取り込まれているのなら、strtok()な
どで必要な部分を切り出すという手もあります。
fopen + fgets
もしくは
ifstream + getline
かな。
> Visual C++2005 Express Edition Beta2
なら
なんでもいいのでしたら、プロジェクトそのものを
C++/CLI(MC++)にして、
System::IO::StreamReaderクラスのReadLineメソッドを使うとか。
# これはさすがに書き換えるのはめんどくさそう。
今のやり方的にはC++と言うよりもCと言う感じなので
取り敢えずは標準関数を使うやり方にした方がわかりやすいかなと思います。
fopen、fgets、fcloseですね。
少なくともCの標準関数くらいは一通り目を通しておきましょう。
この辺はHELPで引けば出てくると思います。
どんな関数があるのか位は大体で良いので把握しておかないと
いちいち、掲示板で聞いていたのでは効率が悪すぎますからね。
皆さんいろいろありがとうございます。
さっそくやってみます。
PATIOさんが言うように標準関数ぐらいはもっと勉強すべきですね・・・
いたらない点が多々あると思いますが今後もお願いします。