いくつかの知識ポイントは、この時間をまとめ
1.なぜファイルを使用
ファイルは何ですか2.
3.開閉
ファイル4シーケンシャル読み取りと書き込み
ファイル5のランダム読み取りおよび書き込み
ファイル6の分類
のファイル7.判断
8、ファイルバッファを読み取るファイルの終わり
1.なぜファイルを使用するのですか?
cを使用して名簿の小さなアプリケーションを作成する場合、名簿プログラムが終了すると、その中のデータは存在しません。次にプログラムを実行するときに、プログラムを再入力する必要があります。不快ではありませんか。永久に保存できる場所にデータを置くことはできませんか?これには、ディスクやデータベースへのデータの保存など、データの永続性の問題が含まれます。
ファイルを使用して、データをコンピューターのハードディスクに直接配置して、データの永続性を実現できます。
2.ファイルとは何ですか?
ファイル=コンテンツ+属性
プログラム設計では、プログラムファイルとデータファイル
2.1、プログラムファイルに分けられます。
プログラムファイルは.cで終わり、.objで終わり、.exeで終わります。
2.2。データファイルファイル
の内容は必ずしもプログラムではありませんが、プログラムの実行時にデータを読み取る必要のあるファイルや、内容を出力するファイルなど、プログラムの実行時に読み書きされるデータです。 。
2.3。ファイル名
ユーザーが識別して引用できるように、ファイルには一意のファイル識別子が必要です。
ファイル名は、ファイルパス+ファイル名トランク+ファイルサフィックス
3の3つの部分で構成されます。ファイルの開閉
3.1ファイルポインタ
使用される各ファイルは、関連するファイル情報を格納するために、メモリ内の対応するファイル情報領域を開きます。ファイルの名前、ファイルのステータス、ファイルの現在の場所など)この情報は構造変数に格納され、構造のタイプはFILEという名前のシステムによって宣言されます。
たとえば、FILE* pf;
pfの定義は、FILEタイプのデータのポインターポインター変数(構造ポインター)です。ファイルには、ファイル情報領域の情報からアクセスできます。つまり、それに関連付けられているファイルは、ファイルポインタ変数を介して見つけることができます。
ファイル=ファイルコンテンツ+ファイル属性
3.2
ファイルは読み取りと書き込みの前に開き、使用後にファイルを閉じる必要があります。
プログラムを作成するとき、ファイルを開くとき、ファイルを指すFILE *ポインター変数を返します。これは、ポインターとファイルの間の関係を確立することと同じです。
fopenを使用してファイルを開き、fcloseを使用してファイルを閉じます
int main()
{
FILE* pf = fopen("myfile.txt", "a");
if (pf == NULL)
{
printf("File open error!\n");
system("pause");
return 1;
}
else{
fputs("不是个梦!", pf);
fclose(pf);
}
system("pause");
return 0;
}
最初の仮パラメータはファイル名で、2番目はオープンモードです。http://www.cplusplus.com/reference/cstdio/fopen/?kw = fopenを参照してください
。4。ファイルシーケンスの読み取りおよび書き込み
文字入力および出力関数:Fgetc / fputc
テキスト行の入力および出力関数:fgets / fputs
形式の入力および出力関数:fscanf / fprintf
バイナリ入力および出力:fread / fwritefprintf
を使用してprintfc
言語をシミュレートできます3つの標準入力および出力を開きますデフォルトではストリームであり、そのタイプもそれぞれFILE *用です
。stdin------->標準入力
stdout -----> display
stderr ------> display
すべてがファイルです。
int main()
{
fprintf(stdout, "chenzhihao is %s\n", "xiao ke ai!");
system("pause");
return 0;
}
5.
ファイルのランダム(位置)読み取りおよび書き込みfseek:ファイルの位置とオフセットに従ってファイルポインタを検索します
ftell:開始位置に対するファイルのオフセットを返します
巻き戻し:ファイルの読み取りと書き込みの位置を返しますファイルの開始位置の先頭に移動します。
詳細については、以下を参照して
ください。http ://www.cplusplus.com/reference/cstdio/fseek/?
kw = fseek 6.ファイルの分類
データの編成形式に従って、データファイルはテキストファイルに変換されます。またはバイナリファイル。
データはバイナリ形式でメモリに保存され、変換せずに外部メモリに出力される場合はバイナリファイルになります。
外部メモリにASCIIコードの形式で保存する必要がある場合は、村の学校の前に変換する必要があります。ASCIIコードの形式で保存されたファイルはテキストファイルです。
7.ファイル読み取り終了の
判断feofが誤って使用されていることを
忘れないでください:ファイルを読み取る過程で、feof関数の戻り値を直接使用してファイルが終了したかどうかを判断することはできませんが、ファイルがファイルのときに適用されます。読み取りが終了します。読み取りの終了に失敗したか、ファイルの終わりに到達したかを判断します。
1)テキストファイルの読み取りが終了したかどうか、戻り値がEOF(fgetc)かNULL(fgets)かを判断
します。
つまり、fetcはEOFかどうかを判断します。fgets
は戻り値がNULLかどうかを判断します
。2)
バイナリファイルかどうか読み取りが終了したかどうかを判断します。戻り値uが読み取り対象の数値よりも小さいかどうかを判別します。
freadは、戻り値が実際に読み取られる数よりも小さいかどうかを判別します。
テキストファイルのコードは次のとおりです。
int main()
{
FILE* pf;
int n = 0;
pf = fopen("czh.txt", "r");
if (NULL == pf){
puts("File Open error!");
}
else{
while (fgetc(pf) != EOF){
n++;
}
//程序走到这里证明跳出循环,也就是文件读取结束,然后要feof判断
//读取结束的原因
if (feof(pf)){
printf("文件总字符数为:%d\n", n);
}
else{
puts("End of file is not reached!");
}
fclose(pf);
}
system("pause");
return 0;
}
バイナリファイルの例:
#define SIZE 10
int main()
{
//二进制文件文件的读写
double a[SIZE] = {
3.10, 3.11, 3.12, 3.13, 3.14, 3.15, 3.16, 3.17, 3.18, 3.19 };
FILE* pf = fopen("data.txt", "wb");
if (pf == NULL){
puts("File open error!");
}
else{
fwrite(a, sizeof(double), SIZE, pf);
fclose(pf);
}
pf = fopen("data.txt", "rb");
if (pf == NULL){
puts("File open error!");
}
else{
double b[3] = {
0.0 };//缓冲区
while (1){
size_t s=fread(b, sizeof(double), 3, pf);
if (s < 3){
break;
}
//对读到的元素进行操作
}
if (feof(pf)){
puts("read file of end....!");
}
/*while (fread(b, sizeof(double), 3, pf)>0)
{
for (int i = 0; i < 3; i++){
printf("%f\n", b[i]);
}
}*/
fclose(pf);
}
system("pause");
return 0;
}
または:
int main()
{
//二进制文件文件的读写
double a[SIZE] = {
3.10, 3.11, 3.12, 3.13, 3.14, 3.15, 3.16, 3.17, 3.18, 3.19 };
FILE* pf = fopen("data.txt", "wb+");
if (pf == NULL)
{
puts("File open error!");
}
else
{
fwrite(a, sizeof(double), SIZE, pf);
//int pos_0 = ftell(pf);
//printf("pos_0 = %d\n", pos_0);
rewind(pf);//让文件读取位置回到其实位置,避免重新关闭和打开
//int pos_1 = ftell(pf);
//printf("pos_1 = %d\n", pos_1);
double b[3] = {
0.0 };//读缓冲区
while (1)
{
size_t s = fread(b, sizeof(double), 3, pf);
if (s < 3)
{
break;
}
}
if (feof(pf))
{
puts("End of file is reached!\n");
}
else
{
puts("file read error!");
}
fclose(pf);
}
system("pause");
return 0;
}
8.ファイルバッファ
cプログラムは、デフォルトでバッファメカニズムを提供します。いわゆるバッファメカニズムはバッファです。バッファは本質的にメモリの一部です。その存在値は効率を向上させることです。これは速達として理解できます。
一般的なバッファリングメカニズムは次のとおりです。1)バッファリングなし2)ラインバッファリング3)フルバッファリング
ラインバッファリング:「\ n」などのバッファリフレッシュマークとして特別な記号を使用します。
フルバッファリング:バッファがいっぱいになったときにバッファをリフレッシュします。強制リフレッシュ。プログラムは終了します。
表示ファイルは行バッファリングと非バッファリングで、
通常のファイルは完全にバッファリングされます