Cでファイルの終わりまで読む
この記事では、C プログラミング言語を使用して、ファイルに書き込み、完全に読み取られるまで読み取る方法について説明します。
C における End-of-File (EOF)
の概要
EOF
は end of file
の略で、ファイルの最後に到達し、それ以上データがないことを示します。
Ctrl+D は、Linux および OS X コンピュータでファイル終了状態を引き起こすために入力する必要がある文字です。 Windows のショートカットはCtrl+Zです。
この文字は、行の最初の文字、つまり、ENTER.
に続く最初の文字である場合にのみ機能します。 ただし、この要件はオペレーティング システムによって異なります。
ENTER
を入力するまで、システムは EOF 文字に気付かない場合があります。 これは、コンソール入力が通常行指向であるためです。
C でのファイル処理
ファイルに保存することを選択した場合、多くの永続的なデータがファイルに保存されます。 他の多くのプログラミング言語と同様に、C にはファイルを管理するための次の関数があります。
-
ファイルを作成する
fopen()
を使用して新しいファイルを作成する -
ファイルを開く
fopen()
を使用して、既に存在する新しいファイルを開く。 -
ファイルを読む
fscanf()
コマンドを使用して、ファイルからデータ ブロックを読み取ります。getc()
はファイルから一度に 1 文字を読み取るコマンドであり、getw()
メソッドを使用してファイルから整数を読み取ります。 -
ファイルに書き込む
fprintf()
は、データ ブロックをファイルに書き込むために使用されます。putc()
コマンドは単一の文字をファイルに書き込みます。putw()
は整数をファイルに書き込むための省略形です。 -
ファイルを閉じる
fclose()
コマンドでファイルを閉じるプロセス。
C言語でファイルの終わりまで読むにはEOF
を使用する
すべての管理機能を使用してファイルを末尾まで読み取る例を見てみましょう。
開始するには、最初に main()
関数を作成し、次に進む前に必要なライブラリをインポートする必要があります。
#include <stdio.h>
int main() {}
メイン関数内で fp
という変数を宣言します。 この変数は、タイプ file.
を参照するファイル ポインターになります。
FILE* fp;
ch
という名前の変数と、* name,
という名前のポインターを作成します。どちらも char
データ型である必要があります。 名前ポインターには、ファイルの名前
を含める必要があります。
char ch;
char* name = "eof.txt";
組み込み関数 fopen()
を使用してファイルを開きます。 ファイルは、読み書き用に作成または開くことができます。
したがって、ファイルの名前とモード w
は、fopen()
関数に提供するパラメーターになります。 文字 W
は、ファイルが現在の状況で書き込みモードで開かれていることを示します。
fp = fopen(name, "w");
printf("Enter the text to write on the file\n");
ファイルがシステム上でまだ利用可能でない場合は、最初に生成
されてから開かれます。 システムにファイルが存在する場合、このメソッドはすぐにそれを open
します。
EOF
変数を使用して、ファイルの最後に到達するまで繰り返し続ける while
ループを実装します。 ループ内で、関数 putc()
を使用してユーザーが提供したテキストを書き込み、それに char 型のパラメーター ch
とファイル型のパラメーター *fp
を渡します。
while ((ch = getchar()) != EOF) {
putc(ch, fp);
}
ファイルにテキストを書きました。 fclose()
関数を使用してファイルを閉じてみましょう。
fclose(fp);
次のステップは、ファイルを読み取り、その情報をコンソールに表示することです。 ユーザーにメッセージを表示することから始めます。
printf("\nText wrote on the file `%s`:\n", name);
fopen()
関数を使用してファイルを再度開きますが、今回はモードを r
として指定します。これは、ファイルが Read
モードで開かれていることを示しているためです。
fp = fopen(name, "r");
EOF
変数を使用して、ファイルの最後に到達するまで繰り返し続ける while
ループを実装します。 開いたファイルのループ内に write
という文字を出力します。
while ((ch = getc(fp)) != EOF) {
printf("%c", ch);
}
feof()
メソッドを使用して、ファイルの書き込みが終了したかどうかを判断します。 これが事実であることが判明した場合、当社はユーザーにメッセージを提供します。
if (feof(fp)) printf("\nReached to the end of file.");
ファイルのテキストを読みました。 fclose()
関数を使用してファイルを閉じてみましょう。
fclose(fp);
完全なソース コード:
#include <stdio.h>
int main() {
FILE* fp;
char ch;
char* name = "eof.txt";
fp = fopen(name, "w");
printf("Enter the text to write on the file\n");
while ((ch = getchar()) != EOF) {
putc(ch, fp);
}
fclose(fp);
printf("\nText wrote on the file `%s`:\n", name);
// reading
fp = fopen(name, "r");
while ((ch = getc(fp)) != EOF) {
printf("%c", ch);
}
if (feof(fp)) printf("\nReached to the end of file.");
fclose(fp);
return 0;
}
ファイルに書き込みたいテキストを入力したら、ENTER キーを押し、Ctrl+Z キーを押してから、 続行するには、もう一度 ENTER キーを押します。
出力:
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn