C ファイル I/O: ファイルの作成、オープン、読み取り、書き込み、クローズ
C ファイル管理
ファイルは大量の永続的なデータを格納するために使用できます。他の多くの言語と同様に、C言語では次のファイル管理関数が提供されています。
- ファイルの作成
- ファイルを開く
- ファイルの読み取り
- ファイルへの書き込み
- ファイルを閉じる
以下は「C」で利用できる最も重要なファイル管理関数です。
function | 目的 | |
---|---|---|
fopen() | ファイルを作成する、または既存のファイルを開く | |
fclose() | ファイルを閉じる | |
fprintf() | データのブロックをファイルに書き込む | |
fscanf() | ファイルからブロックデータを読み取る | |
getc() | ファイルから XNUMX 文字を読み取ります | |
putc() | 単一の文字をファイルに書き込みます | |
ゲットw() | ファイルから整数を読み取ります | |
載せます() | 整数をファイルに書き込む | |
fseek() | ファイル ポインタの位置を指定された場所に設定します | |
フテル () | ファイルポインタの現在位置を返します。 | |
巻き戻し() | ファイルポインタをファイルの先頭に設定します |
ファイルの作成方法
ファイルを操作する場合、最初のステップはファイルを作成することです。 ファイルは、データが保存されるメモリ内のスペースにすぎません。
「C」プログラムでファイルを作成するには、次の構文が使用されます。
FILE *fp; fp = fopen ("file_name", "mode");
上記の構文では、ファイルは標準ライブラリで定義されたデータ構造です。
fopen はファイルを開くために使用される標準関数です。
- ファイルがシステム上に存在しない場合は、ファイルが作成されて開かれます。
- ファイルがシステム上にすでに存在する場合は、これを使用して直接開きます。 function.
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 文が正常に書き込まれたことを示す次の行記号「\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(ファイルポインタ): ファイル ポインタが指すファイルから次の文字を返します。 ファイルの終わりに達すると、EOF が送り返されます。
- fgets(バッファ、n、ファイルポインタ): ファイルから n-1 文字を読み取り、最後の文字として NULL 文字 '\0' が追加された文字列をバッファーに格納します。
- fscanf(ファイルポインタ、変換指定子、変数アドレス): データの解析と分析に使用されます。 ファイルから文字を読み取り、入力をリストに割り当てます。 変数ポインタ 変換指定子を使用した variable_addresses。 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」という文字列が含まれています。これを fgets() 関数を使用して読み取ります。この関数は行ごとに読み取りますが、バッファ サイズは行全体を処理するのに十分な大きさである必要があります。
- ファイルを再度開き、ポインター ファイルをファイルの先頭を指すようにリセットします。 各単語を個別に処理するには、さまざまな文字列変数を作成します。 変数を出力してその内容を確認します。 fscanf() は主に、ファイルからデータを抽出して解析するために使用されます。
- ファイルを再度開き、ポインタ ファイルをファイルの先頭を指すようにリセットします。 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 関数を使用して再度閉じられます。
まとめ
- ファイルは、データが保存されるメモリ内のスペースです。
- 「C」プログラミングは、ファイルを処理するためのさまざまな関数を提供します。
- ファイルを操作する仕組みをファイル管理と呼びます。
- ファイルに対して操作を実行する前に、ファイルを開く必要があります。
- ファイルは、読み取り、書き込み、または追加モードで開くことができます。
- Getc 関数と putc 関数は、単一文字の読み取りと書き込みに使用されます。
- 関数 fscanf() を使用すると、ファイルからのデータの読み取りと解析が可能になります。
- (を使用して) 読み取ることができます getc 関数) EOF に達するまでループしてファイル全体をカバーする
- 関数を使用して、名前を作成した後にファイルに書き込むことができます。 fprintf() また、文字列テキストの最後には改行文字が必要です。