C言語関係掲示板

過去ログ

No.97.feofとferrorについて


あるテキストファイルを、ファイルをバイナリエディタで開き、
0d0a(改行コード)の0aだけを削除し、Cのプログラムで読み込ませて、
feofかferrorでエラー判定をさせたいのですが、上手くいきません。

ちなみに読み込みをさせている関数は、fgetsです。

ferrorでエラー判定をさせたい場合、どのようなファイルを作成すれば
よろしいのでしょうか?
もしかして、fopneする際にテキストモードで開いているから問題なのでしょうか?

よろしくお願いいたします。


kuronekoさん、今晩は。

>あるテキストファイルを、ファイルをバイナリエディタで開き、
>0d0a(改行コード)の0aだけを削除し、Cのプログラムで読み込ませて、
>feofかferrorでエラー判定をさせたいのですが、上手くいきません。

feof関数では終端指示子、ferror関数ではエラー指示子をそれぞれ
チェックしていますが、これは処理系依存ですがFILEのflagsのビットで
ある場合が多いようです。
終端指示子ですと、ファイルアクセス関数でファイル終端までアクセス
した場合にセットされるようですし、エラー指示子ですと、"w"モードで
fopenしたファイルに対して読み込み動作を行ったりするとセットされる
ようです。つまり、いずれもファイル処理関数でセットされるので、
ファイルそのものに細工をして発生させられるものではないのでは
無いでしょうか。

>ferrorでエラー判定をさせたい場合、どのようなファイルを作成すれば
>よろしいのでしょうか?

一番簡単なのは、"w"モードでfopenしたファイルに対して読み込み動作
を行うことではないでしょうか。あとは、エラー指示子そのものを
故意にORしてONしてしまうとか。

この辺の関数、実はまとめてあるんですがUPしてませんでした。
UPしますので参考にしてみてください。
ferror clearerr feof


ともじさん、こんばんわkuronekoです。

>一番簡単なのは、"w"モードでfopenしたファイルに対して読み込み動作
>を行うことではないでしょうか。あとは、エラー指示子そのものを
>故意にORしてONしてしまうとか。

これは、"a"モードでも大丈夫なのでしょうか?

あと"r"モードで、ファイルを開いた際に、"w"又は"a"モードでも
同等のエラーが発生すると考えてよろしいのでしょうか?

わざわざサイトをアップして頂きまして、ありがとうございます。

P.S
fgetsは改行コード(0x0d0x0a)の0x0aしか読まないようなので、
0x0aをバイナリエディタで削除してもダメかもしれません。
(まだプログラムを組んだ訳ではないので、明確ではありませんが)


>これは、"a"モードでも大丈夫なのでしょうか?

はい、エラーが発生します。

>あと"r"モードで、ファイルを開いた際に、"w"又は"a"モードでも
>同等のエラーが発生すると考えてよろしいのでしょうか?

"r"モードでfopenしたファイルに書き込み動作を行った場合も
同様にエラーが発生します。


kuronekoです。

ともじさん、ご返答ありがとうございました。


kuronekoです。

前に、fgetsは0x0dを無視するというようなことを書きましたが、
fgetcの間違えでした。
どうもすみません。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.01.11
Copyright(c) 2000-2002 TOMOJI All Rights Reserved