C ファイル I/O:ファイルの作成、オープン、読み取り、書き込み、およびクローズ
C ファイル管理
ファイルを使用して、大量の永続データを格納できます。他の多くの言語と同様に、「C」は次のファイル管理機能を提供します。
<オール>以下は、「C」で利用可能な最も重要なファイル管理機能です。
このチュートリアルでは、次のことを学びます-
- ファイルの作成方法
- ファイルを閉じる方法:
- ファイルへの書き込み
- fputc() 関数:
- fputs () 関数:
- fprintf() 関数:
- ファイルからデータを読み取る
- getc と putc によるインタラクティブなファイルの読み書き
ファイルの作成方法
ファイルを操作するときはいつでも、最初のステップはファイルを作成することです。ファイルは、データが保存されるメモリ内のスペースに他なりません。
次の構文が使用される「C」プログラムでファイルを作成するには、
FILE *fp;
fp = fopen ("file_name", "mode");
上記の構文では、ファイルは標準ライブラリで定義されているデータ構造です。
fopen は、ファイルを開くために使用される標準関数です。
- ファイルがシステム上に存在しない場合は、ファイルが作成されてから開かれます。
- ファイルがシステム上に既に存在する場合、この関数を使用して直接開きます。
fp は、タイプ ファイルを指すファイル ポインタです。
ファイルを開くか作成するときはいつでも、そのファイルで何をするかを指定する必要があります。 「C」プログラミングのファイルは、読み取り/書き込み目的で作成または開くことができます。モードは、以下に示す目的のいずれかでファイルを開くかどうかを指定するために使用されます。以下は、ファイルの操作中に使用できる「C」プログラミングのさまざまなタイプのモードです。
追加モードでファイルを開きます。ファイルが追加モードの場合、ファイルが開かれます。ファイル内のコンテンツは変更されません.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」に到達するまで、ファイルに書き込みます。プロセスは、配列の各文字を取得してファイルに書き込むことです。
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);
} 出力:
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;
} 出力:
ファイルからのデータの読み取り
ファイルからデータを読み取る専用の関数が 3 つあります
- fgetc(file_pointer): ファイルポインタが指すファイルから次の文字を返します。ファイルの終わりに到達すると、EOF が返されます。
- fgets(buffer, n, file_pointer): ファイルから n-1 文字を読み取り、NULL 文字「\0」が最後の文字として追加されたバッファに文字列を格納します。
- fscanf(file_pointer, conversion_specifiers, variable_addresses) :データの解析と分析に使用されます。ファイルから文字を読み取り、変換指定子を使用して入力を変数ポインター 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
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;
}
出力:
まとめ
- ファイルとは、データが保存されるメモリ内のスペースです。
- 「C」プログラミングは、ファイルを処理するためのさまざまな機能を提供します。
- ファイルを操作する仕組みをファイル管理と呼びます。
- 操作を行う前にファイルを開く必要があります。
- ファイルは読み取り、書き込み、または追加モードで開くことができます。
- getc 関数と putc 関数は、1 文字の読み取りと書き込みに使用されます。
- 関数 fscanf() を使用すると、ファイルからデータを読み取って解析できます
- 読み取ることができます (getc を使用) 関数) EOF が検出されるまで、すべてのファイルを対象とするループによるファイル全体
- 関数 fprintf() を使用して、名前を作成した後にファイルに書き込むことができます また、文字列テキストの末尾に改行文字が必要です。
C言語