C ファイル I/O: ファイルの作成、オープン、読み取り、書き込み、クローズ
⚡ スマートサマリー
C言語におけるファイル処理では、stdioライブラリを介して永続的なデータをディスクに保存します。stdioライブラリは、fopenでファイルを開き、fputc、fputs、またはfprintfで書き込み、fgetc、fgets、またはfscanfで読み込み、fcloseでファイルを閉じます。

C ファイル管理
ファイルは、大量の永続データを保存するために使用できます。他の多くの言語と同様に、C言語は以下のファイル管理機能を提供します。 機能,
- ファイルの作成
- ファイルを開く
- ファイルの読み取り
- ファイルへの書き込み
- ファイルを閉じる
以下は「C」で利用できる最も重要なファイル管理関数です。
| function | 目的 |
|---|---|
| fopen() | ファイルを作成する、または既存のファイルを開く |
| fclose() | ファイルを閉じる |
| fprintf() | データのブロックをファイルに書き込む |
| fscanf() | ファイルからブロックデータを読み取る |
| getc() | ファイルから XNUMX 文字を読み取ります |
| putc() | 単一の文字をファイルに書き込みます |
| ゲットw() | ファイルから整数を読み取ります |
| 載せます() | 整数をファイルに書き込む |
| fseek() | ファイル ポインタの位置を指定された場所に設定します |
| フテル () | ファイルポインタの現在位置を返します。 |
| 巻き戻し() | ファイルポインタをファイルの先頭に設定します |
ファイルの作成方法
ファイルを操作する場合、最初のステップはファイルを作成することです。 ファイルは、データが保存されるメモリ内のスペースにすぎません。
「C」プログラムでファイルを作成するには、次の構文が使用されます。
FILE *fp; fp = fopen ("file_name", "mode");
上記の構文では、ファイルは標準ライブラリで定義されたデータ構造です。
fopen はファイルを開くために使用される標準関数です。
- ファイルがシステム上に存在しない場合は、ファイルが作成されて開かれます。
- システムが既にファイルを持っている場合は、この関数を使用して直接ファイルを開きます。
fpはファイルです ポインタ これはタイプファイルを指します。
ファイルを開いたり作成したりするときは、そのファイルで何を行うかを指定する必要があります。C プログラミングでは、読み取り/書き込みの目的でファイルを作成したり開いたりできます。モードは、以下のいずれかの目的でファイルを開くかどうかを指定するために使用されます。以下は、ファイルで作業するときに使用できる C プログラミングのさまざまなタイプのモードです。
| ファイルモード | 詳細説明 |
|---|---|
| r | 読み取り用にファイルを開きます。 ファイルが読み取りモードの場合、ファイルがシステム上にすでに存在する場合、データは削除されません。 |
| w | 書き込み用にファイルを開きます。 ファイルが書き込みモードの場合、ファイルが存在しない場合は新しいファイルが作成されます。 ファイルがシステム上にすでに存在する場合、ファイル内のすべてのデータは切り捨てられ、書き込み目的で開かれます。 |
| a | ファイルを追記モードで開きます。ファイルが追記モードの場合、ファイルは開かれますが、ファイル内の内容は変更されません。 |
| r+ | 最初から読み書き可能 |
| w+ | 読み取りと書き込みのために開いて、ファイルを上書きします |
| a+ | 読み取りと書き込みのために開き、ファイルに追加します |
指定された構文では、ファイル名とモードは次のように指定されます。 ストリング したがって、それらは常に二重引用符で囲む必要があります。
具体的な例を挙げますと、以下の通りです。
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
出力:
コードを保存したのと同じフォルダーにファイルが作成されます。
ファイルを作成するパスを指定できます
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
ファイルを閉じる方法
ファイルに対する操作が終了したら、必ずファイルを閉じる必要があります。これは、ファイルの内容とリンクが終了することを意味します。これにより、ファイルが誤って損傷されるのを防ぎます。
'C' では、ファイルを閉じる操作を実行するための fclose 関数が用意されています。fclose の構文は次のとおりです。
fclose (file_pointer);
具体的な例を挙げますと、以下の通りです。
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
fclose関数はファイルポインタを引数として受け取ります。ファイルポインタに関連付けられたファイルは、fclose関数によって閉じられます。ファイルを閉じることに成功した場合は0を返し、ファイルを閉じる際にエラーが発生した場合はEOF(ファイルの終端)を返します。
ファイルを閉じた後は、同じファイル ポインターを他のファイルでも使用できます。
「C」プログラミングでは、プログラムが終了するとファイルは自動的に閉じられます。 fclose 関数を記述してファイルを手動で閉じることは、良いプログラミング方法です。
ファイルへの書き込み
C では、ファイルに書き込むときに、改行文字 '\n' を明示的に追加する必要があります。
stdio ライブラリは、ファイルに書き込むために必要な関数を提供します。
- fputc(char, file_pointer): file_pointerが指すファイルに文字を書き込みます。
- fputs(str, file_pointer): file_pointer が指すファイルに文字列を書き込みます。
- fprintf(file_pointer, str, variable_lists): file_pointer が指すファイルに文字列を出力します。文字列には、オプションで書式指定子と変数リスト variable_lists を含めることができます。
以下のプログラムは、ファイルへの書き込みを実行する方法を示しています。
fputc() 関数:
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
出力:
上記のプログラムは、fputc_test.txt ファイルに1文字ずつ書き込み、改行記号「\n」に到達するまで続けます。改行記号「\n」は、文が正常に書き込まれたことを示します。この処理は、配列の各文字を取り出し、ファイルに書き込むというものです。
- 上記のプログラムでは、fputc_test.txt というファイルを作成して書き込みモードで開き、ファイルに書き込まれる文字列を宣言しました。
- for ループを使用して文字ごとの書き込み操作を実行し、「\n」文字が検出されるまで各文字をファイルに格納し、その後 fclose 関数を使用してファイルを閉じます。
fputs() 関数:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
出力:
- 上記のプログラムでは、fputs_test.txt というファイルを作成し、書き込みモードで開きました。
- fputs() 関数を使用して 3 つの異なる文字列を書き込む書き込み操作を実行した後
- 次に、fclose 関数を使用してファイルを閉じます。
fprintf()関数:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
出力:
- 上記のプログラムでは、fprintf_test.txt というファイルを作成し、書き込みモードで開きました。
- fprintf() 関数を使用して文字列を書き込む書き込み操作を実行した後、fclose 関数を使用してファイルが閉じられます。
ファイルからのデータの読み取り
ファイルからのデータの読み取り専用の XNUMX つの異なる関数があります。
- fgetc(file_pointer): ファイルポインタが指すファイルから次の文字を返します。ファイルの終端に達すると、EOFが返されます。
- fgets(buffer, n, file_pointer): ファイルから n-1 文字を読み込み、NULL 文字 '\0' を最後の文字として追加した文字列をバッファに格納します。
- fscanf(file_pointer, conversion_specifiers, variable_adresses): データの解析に使用されます。ファイルから文字を読み込み、変換指定子を使用して入力を変数ポインタのリスト variable_adresses に割り当てます。scanf と同様に、fscanf はスペースまたは改行文字に遭遇すると文字列の読み込みを停止することに注意してください。
次のプログラムは、それぞれ fgets()、fscanf()、fgetc() 関数を使用して fputs_test.txt ファイルから読み取る方法を示しています。
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
結果:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- 上記のプログラムでは、以前に fprintf() 関数を使用して作成された「fprintf_test.txt」というファイルを開いており、そのファイルには「Learning C with Guru99 行の文字列です。これを 1 行ずつ読み込む fgets() 関数を使用して読み込みます。バッファサイズは、行全体を処理できる十分な大きさである必要があります。
- ファイルを開き直してポインターファイルの先頭を指すようにリセットします。各単語を個別に処理するために、さまざまな文字列変数を作成します。変数を出力してその内容を確認します。fscanf() は主に、tracファイルからデータを解析する。
- ファイルを再度開き、ポインタ ファイルをファイルの先頭を指すようにリセットします。 EOF ステートメントが検出されるまで、getc() 関数を使用してデータをファイルから XNUMX 文字ずつ読み取り、出力します。
- さまざまなバリアントを使用してファイルの読み取り操作を実行した後、fclose 関数を使用してファイルを再度閉じました。
getc および putc を使用した対話型ファイルの読み取りおよび書き込み
これらは最も単純なファイル操作です。 Getc は get character の略で、 putc は put character の略です。 これら 2 つの関数は、一度に 1 つの文字のみを処理するために使用されます。
次のプログラムは、「C」プログラミングにおけるファイル処理関数を示しています。
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
出力:
- 上記のプログラムでは、demo というファイルを作成し、書き込みモードで開きました。
- 書き込み操作が実行された後、ファイルは fclose 関数を使用して閉じられます。
- 再び、読み取りモードでデータを含むファイルを開きました。EOF が見つかるまで while ループが実行されます。ファイルの終わりが見つかると、操作は終了し、printf 関数を使用してデータが表示されます。
- 読み取り操作を実行した後、ファイルは fclose 関数を使用して再度閉じられます。











