テスト環境:WIN10 VS2019
この章の目的:
C言語がファイルを読み書きする方法を読者に理解させ、ファイル操作に関連するいくつかの簡単な関数を使用できるようにします。
ファイルの読み取りおよび書き込み操作
ここでは、ファイルの読み取りと書き込みについて明確に説明する必要があります。これは、ファイルの読み取りと書き込みを理解するために非常に重要です。
ファイルの読み取り:ターゲットファイルのデータを保存する変数に入れます。
ファイルの書き込み:変数のデータをターゲットファイルに書き込みます。
ファイルポインタ
Baidu百科事典:C言語では、ポインター変数はファイルを指すために使用され、このポインターはファイルポインターと呼ばれます。ファイルポインタが指すファイルに対して、さまざまな操作を実行できます。
ファイルポインタのタイプはFILE*です。
読者がこの概念を理解しやすくするために、ここで例を示します。
ファイルからデータを読み取りたい場合、最初のファイルポインタはaを指します。単にファイルデータを読み取る場合、最初に読み取ることしかできず、次にbを読み取ることができます。ファイルポインタをfに向けると、fからデータの読み取りを開始できます。(このように簡単に理解できます)
ファイルの開閉
ファイルは読み取りと書き込みの前に開き、使用終了後に閉じる必要があります。
プログラムを作成するとき、ファイルを開くとき、ファイルを指すFILE *ポインター変数を返します。これは、ポインターとファイルの間の関係を確立することにも相当します。ANSICは、fopen関数を使用してファイルを開き、fcloseを使用してファイルを閉じることを規定しています。
fopenについて:
MSDNソフトウェアまたはwww.cplusplus.comを使用して、fopenの使用法について問い合わせることができます。
fopenには2つのパラメーターがあります。1つは開くファイルのファイル名で、もう1つはファイルを開く方法です。
注:最初のパラメーターがファイルパスを使用せず、ファイル名のみを書き込む場合、デフォルトのパスはソースファイルのディレクトリにあります。ただし、通常はfopen( "D:\\ data.txt"、 "r")などのパスを取得し、パスを書き込むときに二重スラッシュを使用します。
次のように開きます。
ファイルの使用方法 | 意味 | 指定したファイルが存在しない場合 |
「r」(読み取り専用) | データを入力するには、既存のテキストファイルを開きます | エラー |
「w」(書き込み専用) | データを出力するには、テキストファイルを開きます | 新しいファイルを作成する |
“a”(追加) | テキストファイルの最後にデータを追加します | 新しいファイルを作成する |
「rb」(読み取り専用) | データを入力するには、バイナリファイルを開きます | エラー |
「wb」(書き込みのみ) | データを出力するには、バイナリファイルを開きます | 新しいファイルを作成する |
“ab”(追加) | バイナリファイルの最後にデータを追加します | エラー |
「r+」(読み取りおよび書き込み) | 読み取りと書き込み用のテキストファイルを開きます | エラー |
「w+」(読み取りおよび書き込み) | 読み取りと書き込みには、新しいファイルが提案されます | 新しいファイルを作成する |
「a+」(読み取りおよび書き込み) | ファイルの最後で読み取りと書き込みのためにファイルを開きます | 新しいファイルを作成する |
「rb+」(読み取りおよび書き込み) | 読み取りと書き込み用にバイナリファイルを開きます | エラー |
「wb+」(読み取りと書き込み) | 読み取りと書き込み用の新しいバイナリファイルを作成します | 新しいファイルを作成する |
「ab+」(読み取りと書き込み) | ファイルの最後で読み取りと書き込みを行うためにバイナリファイルを開きます | 新しいファイルを作成する |
理解できない場合は、簡単な例を挙げてください。
int main()
{
//以只读的方式打开文件
FILE* pf = fopen("D:\\data.txt", "r");
if (pf == NULL)
{
printf("%s", strerror(errno));
return 0;
}
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
ここではあまり詳しく説明しません。上記のコードについてご不明な点がございましたら、お気軽にご連絡ください。ありがとうございます。
fcloseについて:
ファイルを閉じるには、ファイルポインタをfclose関数に渡すだけです。を閉じた後、このポインタをnullにすることをお勧めします。
ファイル操作関連機能
次の基本的な機能は、MSDNまたはwww.cplusplus.comから照会できます。
特徴 | 関数名 | に適用 |
文字入力機能 | fgetc | すべての入力ストリーム |
文字出力機能 | fputc | すべての出力ストリーム |
テキスト行入力機能 | fgets | すべての入力ストリーム |
テキスト行出力機能 | fputs | すべての出力ストリーム |
フォーマット入力機能 | fscanf | すべての入力ストリーム |
フォーマットされた出力関数 | fprintf | すべての出力ストリーム |
バイナリ入力 | フレッド | 資料 |
バイナリ出力 | fwrite | 資料 |
fread()の使用
下の図は、初期ファイル(バイナリファイル)の内容を表しています。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<windows.h>
typedef struct student
{
char ch[20];
int age;
int id;
}stu;
int main()
{
//打开文件
FILE* pf = fopen("D:\\data.txt", "rb");
if (pf == NULL)
{
printf("%s", strerror(errno));
return 0;
}
//读数据
stu arr[2] = { 0 };
fread(arr,sizeof(stu),2,pf);
printf("%s %d %d", arr[0].ch, arr[0].age, arr[0].id);
printf("\n%s %d %d", arr[1].ch, arr[1].age, arr[1].id);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
演算結果:
fwrite()は
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<windows.h>
typedef struct student
{
char ch[20];
int age;
int id;
}stu;
int main()
{
//打开文件
FILE* pf = fopen("D:\\data.txt", "wb");
if (pf == NULL)
{
printf("%s", strerror(errno));
return 0;
}
//写数据
stu arr[2] = { {"张三",20,2021},{"王五",21,2022}};
fwrite(arr,sizeof(stu),2,pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
結果を書き込む:
ファイルバッファ
ANSIC標準では、「バッファファイルシステム」を使用してデータファイルを処理します。いわゆるバッファファイルシステムとは、プログラムで使用されているファイルごとに、システムがメモリ内の「ファイルバッファ」を自動的に開くことを意味します。メモリからディスクに出力されたデータは、最初にメモリ内のバッファに送信され、バッファがいっぱいになった後にディスクに送信されます。ディスクからコンピュータにデータを読み込む場合は、ディスクファイルからデータを読み込んでメモリバッファ(フルバッファ)に入力し、からプログラムデータ領域(プログラム変数など)にデータを送信します。バッファを1つずつ。バッファのサイズは、Cコンパイルシステムによって決定されます。
#include <stdio.h>
#include <windows.h>
//VS2013 WIN10环境测试
int main()
{
FILE*pf = fopen("test.txt", "w");
fputs("abcdef", pf);//先将代码放在输出缓冲区
Sleep(10000);
fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)
//注:fflush 在高版本的VS上不能使用了
fclose(pf);
//注:fclose在关闭文件的时候,也会刷新缓冲区
pf = NULL;
return 0;
}
//注:fcloseは、ファイルを閉じるときにもバッファーをフラッシュします
ここで結論を導き出すことができます。
バッファが存在するため、C言語がファイルを操作するときは、ファイル操作が終了するときにバッファをフラッシュするか、ファイルを閉じる必要があります。そうしないと、ファイルの読み取りと書き込みで問題が発生する可能性があります。
要約する
初心者の場合、ファイル操作に関連する多くの機能を思い出せなくてもかまいません。MSDNをさらに確認してください。
この章で説明したファイル操作に関連する関数を使用することを強くお勧めします。
やっと
この章についてご不明な点がございましたら、お気軽にご連絡ください。
この章に誤りがある場合は、指摘してください。とても感謝しています。
役に立ったら、いいねしてコメントしてください、ありがとうございます。