No.2ベストアンサー
- 回答日時:
>データの読み込んでいき、最後のデータの読み込み終了後、さらにデータを読み込むと\0を読み込むと
>考えたのですが、間違いでしょうか?
最後に\0は読み込まれません。
freadは読み込んだ要素の数を返します。要素のサイズが1の場合は、読み込んだバイト数が返ることに
なります。そうすると、戻り値が0の場合が、読み込みの終わりと判断することになるのですが、
読み込み時、エラーがあった場合も、freadは0を返します。つまり、エラーなのかファイル終端なのかは、freadの戻り値だけでは、判断できません。従って、その後、feofを呼び出し、ファイル終端に達しているかを確認します。ファイル終端なら、正常終了、そうでないならエラーが発生していると、判断します。
>do~while();文を使った場合、()内には何を代入したらいいですか?
do whileでは難しいです。while(1)を使用したほうが、簡単に作れます。
上記を踏まえて、作成したサンプルが、以下の内容です。
ファイル名をsample.cとして、プログラムsampleを作成後、
sample xxx
(xxxは読み込みたいファイル名)とすると、
毎回、読み込んだファイルのサイズを出力し、正常であれば「正常終了」
が、表示されます。
-----------------------------------
#include <stdio.h>
#include <errno.h>
int main(int argc , char *argv[])
{
FILE*fp;
size_trsize;
intret;
charbuff[256];
if (argc != 2){
printf ("%s ファイル名\n",argv[0]);
return 0;
}
fp = fopen(argv[1],"rb");
if (fp == NULL){
printf("ファイルオープン失敗:errno=%d\n",errno);
return 10;
}
while(1){
rsize = fread(buff,1,sizeof(buff),fp);
//読み込んだ要素数が0なら終了
//但し、これはエラーが発生したから0なのか、ファイル終端に達したから0なのかを
//区別できない(freadの仕様のため)
if (rsize == 0) break;
//とにかく正常に読めたので、その処理をおこなう。
//読み込んだサイズはrsizeバイトである
//rsizeの内容を印字して、処理とする(実際の処理は質問者が実装する)
printf("rsize=%d\n",rsize);
}
//breakから抜けたとき、ファイル終端に達していることを確認する
if (feof(fp) == 0){
//ファイル終端に達していない、つまり何らかのエラーがあった
printf("ファイル読み込み失敗:errno=%d\n",errno);
//既にエラーが起こっているのでfcloseのエラーはチェックしない
fclose(fp);
return 10;
}
ret = fclose(fp);
if (ret != 0){
printf("ファイルクローズ失敗:errno=%d\n",errno);
return 10;
}
printf("正常終了\n");
return 0;
}
------------------------------------
No.1
- 回答日時:
なぜリファレンスを参照しないのでしょう?
「fread()でデータが読めなかった場合」の動作についても記述されているハズです。
まぁ、自分でリファレンス引くより、他人に聞いた方が効率的ですけどね。
# 教えてくれる人が居る限りは。
>do~while();文を使った場合、()内には何を代入したらいいですか?
「代入」というのは微妙に違うと思われますが……。
fread()の戻り値を確認する。
feof()でファイル終端か確認する。
などなど……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 確定申告 e-TAXで確定申告をしています。 ふるさと納税の金額を寄付先から交付されたデータを読み込ませて対応 3 2023/02/23 08:05
- その他(プログラミング・Web制作) 【python】Excelファイルを読み込む際の日付の表示形式を任意にする 2 2022/11/24 14:21
- Access(アクセス) accessでexcelを読み込む時のデータ型 1 2022/03/28 19:45
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- Excel(エクセル) Excel Powerクエリーの質問、行数指定は可能でしょうか? 2 2022/08/22 12:54
- その他(コンピューター・テクノロジー) データの転送速度は何で決まるのでしょうか?読み込み3000MB/Sで書き込み2000MB/Sの外付け 3 2023/07/14 22:13
- ドライブ・ストレージ 外付けCDドライブだけ音楽CDが読み込まない 3 2023/08/18 21:28
- 写真・ビデオ スマホアプリと携帯内の写真データについて 1 2023/06/18 22:03
- 写真・ビデオ スマホアプリと携帯内の写真データについて 3 2023/06/18 22:46
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
fread()エラー
C言語・C++・C#
-
fopne で失敗する原因
C言語・C++・C#
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
-
4
C言語 exitの使い方
C言語・C++・C#
-
5
EOF
C言語・C++・C#
-
6
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
7
C言語 配列の長さの上限
C言語・C++・C#
-
8
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
9
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
10
C言語での引数の省略方法
C言語・C++・C#
-
11
fread関数の使い方がわかりません。
C言語・C++・C#
-
12
char*を初期化したいのですが
C言語・C++・C#
-
13
printf による16進表示について
C言語・C++・C#
-
14
ファイルの結合
C言語・C++・C#
-
15
ファイルの読み込みとメモリ確保について。
C言語・C++・C#
-
16
system関数がうまくいかない
C言語・C++・C#
-
17
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
18
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
19
freadとfwrite
C言語・C++・C#
-
20
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
Adobeのプレミアプロの書き出し...
-
GomPlayのブックマークXMLファ...
-
「引数が無効です」ACCESS
-
FORTRANの実行エラーについて
-
今DirectSoundの初期化でわから...
-
PCにmicroSDカードを(USBで)差...
-
エクセル「これ以上新しいフォ...
-
エクセル起動時のアプリケーシ...
-
エクセルでのファイル名の一括...
-
パワーポイントで『訂正できな...
-
DisplayAlertsブロパティで ”実...
-
freadでデータがない場合の読込...
-
RAR圧縮ファイル(分割)の順番が...
-
Excelのファイルが開けま...
-
参照の関数(リンク)を使用し...
-
マウントしたファイルサーバー...
-
画像読み込み失敗の判定
-
アウトルックが起動できません
-
[VBS]ファイルコピーで怪奇現象
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
FTPの送信結果を検知したい
-
NAS上のファイルの使用中が解除...
-
VBA ExecuteExcel4Macro 型が一...
-
access テキストボックスの値取得
-
EXCELのVBAでWORDが開いてある...
-
すでにファイルが開かれている...
-
EXCELVBAでONEDRIVE上への保管...
-
Excelファイルのマクロによる排...
-
OUTLOOK VBA 指定フォルダ内の...
-
エクセルマクロでエラーの原因...
-
Adobeのプレミアプロの書き出し...
おすすめ情報