C言語でのファイルの読み書き操作とは何ですか?

coldplay.xixi
リリース: 2020-07-27 13:44:17
オリジナル
4186 人が閲覧しました

C 言語ファイルの読み取りおよび書き込み操作には、次のものが含まれます: 1. ファイル内の文字の読み取りおよび書き込みを行う関数、コードは [int fgetc(FILE *stream)] です; 2. 文字列の読み取りおよび書き込みを行う関数ファイル内のコードは [ int fputs(char *string,FILE *stream)] です。

C言語でのファイルの読み書き操作とは何ですか?

C 言語ファイルの読み取りおよび書き込み操作には、次のものが含まれます:

1. ファイルを開く関数 fopen()

ファイルオープン操作とは、ユーザーが指定したファイルをメモリ上のFILE構造体領域に確保し、その構造体のポインタをユーザープログラムに返すことを意味します。ユーザ プログラムは、この FILE ポインタを使用して、指定されたファイル アクセス操作を実装できます。 open 関数を使用する場合、ファイル名とファイル操作モード (読み取り、書き込み、読み取り/書き込み) を指定する必要があります。

ファイル名が存在しない場合は、ファイルを作成することを意味します (ファイルの書き込みのみ)。ファイルの読み取り時にエラーが発生するため)、ファイル ポインタがファイルの先頭を指します。同名のファイルが存在する場合は削除し、同名のファイルが存在しない場合はファイルを作成し、ファイルポインタをファイルの先頭に合わせます。

fopen(char *filename,char *type);
ログイン後にコピー

#*filename は、開かれるファイルのファイル名ポインタです。これは通常、二重引用符で囲まれたファイル名、または二重バックスラッシュで区切られたパス名として表されます。 #**type パラメータは、ファイルを開くための操作方法を示します。利用可能な操作方法は次のとおりです:

    意味 "r" は読み取り専用で開きます;
  • "w" はファイル ポインタを開きます先頭を指します。 、書き込みのみ;
  • "a" は開き、ファイルの末尾を指し、既存のファイルに追加します。
  • "rb" はバイナリ ファイルを読み取り専用で開きます;
  • "wb" はバイナリ ファイルを書き込み専用で開きます;
  • "ab" はバイナリ ファイルを開き、 を追加します ;
  • "r " 既存のファイルを読み取り/書き込みモードで開きます;
  • "w "既存のファイルを読み取り/書き込みモードで作成します 新しいテキスト ファイル;
  • "a " 読み取り/書き込みモードで追加するファイルを開きます;
  • "rb " 読み取り/書き込みモードで開きます バイナリ ファイルを書き込みモードで開きます;
  • "wb " 読み取り/書き込みモードで新しいバイナリ ファイルを作成します;
  • "ab " 追加するために読み取り/書き込みモードでバイナリ ファイルを開きます;
  • fopen() を使用してファイルを正常に開くと、この関数は戻り値を返しますFILE ポインタ。ファイルを開くことができなかった場合は、NULL ポインタが返されます。

2. ファイル関数 fclose() を閉じる

ファイル操作が完了したら、fclose() 関数を使用してファイルを閉じる必要があります。開いているファイルに書き込む必要があります。書き込み時に、ファイル バッファー内のスペースが書き込まれた内容で埋められていない場合、その内容は開いているファイルに書き込まれず、失われます。開いているファイルを閉じる場合にのみ、ファイル バッファに残っている内容をファイルに書き込むことができ、ファイルが完成します。

また、ファイルを閉じると、そのファイルに対応するFILE構造が解放され、この時点ではファイルへのアクセス操作が行われないため、閉じたファイルは保護されます。ファイルを閉じるということは、ファイルのバッファを解放することも意味します。

int fclose(FILE *stream);
ログイン後にコピー

これは、この関数が FILE ポインターに対応するファイルを閉じて、整数値を返すことを意味します。ファイルが正常に閉じられた場合は 0 値が返され、それ以外の場合は 0 以外の値が返されます。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;   //  头文件#include <stdio.h>
    if((fp=fopen("123.txt","w"))==NULL)
    {
        printf("file cannot open \n");
        //exit(0);  头文件#include <stdlib.h>
        //exit结束程序,一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。
    }
    else
        printf("file opened for writing \n");
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}
ログイン後にコピー

3. ファイルの読み取りと書き込み

(1). ファイル内の文字の読み取りと書き込みを行う関数 (一度にファイル内の 1 文字のみを読み取りおよび書き込みます) time):

int fgetc(FILE *stream);
int getchar(void);
int fputc(int ch,FILE *stream);
int putchar(int ch);
int getc(FILE *stream);
int putc(int ch,FILE *stream);
ログイン後にコピー

fgetc()

関数は、ストリーム ポインタが指すファイルから文字を読み取ります (例: ch=fgetc(fp); から文字を読み取ります)ストリーム ポインタ fp が指すファイル 文字が読み取られ、ch に割り当てられます。 fgetc() 関数が実行されるとき、ファイル ポインタがファイルの終端を指している場合、ファイルの終端フラグ EOF が検出されます (その対応する値は -1)、関数は ch. に -1 を返します。この関数の戻り値が -1 であるかどうかをチェックしてファイルの終わりに達したかどうかを判断するプログラムでよく使用されます。続ける。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { FILE *fp; char ch; if((fp=fopen(&quot;123.txt&quot;,&quot;r&quot;))==NULL) printf(&quot;file cannot open \n&quot;); else printf(&quot;file opened for writing \n&quot;); while((ch=fgetc(fp))!=EOF) fputc(ch,stdout); //这里是输出到屏幕 if(fclose(fp)!=0) printf(&quot;file cannot be closed \n&quot;); else printf(&quot;file is now closed \n&quot;); return 0; }</pre><div class="contentsignin">ログイン後にコピー</div></div>このプログラムは、123.txt ファイルを読み取り専用モードで開きます。while ループを実行すると、ループするたびにファイル ポインタが 1 文字位置に戻ります。 fgetc() 関数を使用してファイルポインタで指定された文字を ch 変数に読み込み、fputc() 関数を使用して画面に表示します。ファイルの終わりマーク EOF が読み込まれると、ファイルは閉まっている。上記プログラムでは、文字変数chの値をストリームポインタで指定されたファイルに書き込むfputc()関数を使用していますが、ストリームポインタは標準出力(表示)のFILEポインタstdoutを使用しているため、読み込んだ文字が表示されます。モニター上で。別の例: fputc(ch,fp); この関数は構造体を実行し、ch で表される文字をストリーム ポインタ fp が指すファイルに送信します。

TC では、putc() は fputc() と同等であり、getc() は fgetc() と同等です。 putchar(c) は fputc(c,stdout) と同等、getchar() は fgetc(stdin) と同等です。ここでの char ch の使用は実際には非科学的であることに注意してください。最終的に終了マークを判定するときに ch!=EOF が調べられ、EOF の値は -1 であり、明らかに char とは比較にならないからです。したがって、用途によっては

int ch

として定義します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { FILE *fp; if((fp=fopen(&quot;123.txt&quot;,&quot;a&quot;))==NULL) printf(&quot;file cannot open \n&quot;); else printf(&quot;file opened for writing \n&quot;); char ch=&amp;#39;e&amp;#39;; fputc(ch,fp); //输入到文件中 if(fclose(fp)!=0) printf(&quot;file cannot be closed \n&quot;); else printf(&quot;file is now closed \n&quot;); return 0; }</pre><div class="contentsignin">ログイン後にコピー</div></div>(2). ファイル内の文字列を読み書きするための関数

char *fgets(char *string,int n,FILE *stream);
char *gets(char *s);
int fprintf(FILE *stream,char *format,variable-list);
int fputs(char *string,FILE *stream);
char *puts(char *s);
int fscanf(FILE *stream,char *format,variable-list);
ログイン後にコピー

其中fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针string指向的字符数组中去,例如: fgets(buffer,9,fp); 将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。

注意,fgets()函数读到'/n'就停止,而不管是否达到数目要求。同时在读取字符串的最后加上'/0'。 fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以长用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错,

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

例如下面的程序用fgets()函数读test.txt文件中的第一行并显示出来:

#include "stdio.h" 
int main() {
    FILE *fp; 
    char str[128]; 
    if((fp=fopen("123.txt","r"))==NULL) {
        printf("cannot open file/n"); exit(1);
    } 
    while(!feof(fp)) {
        if(fgets(str,128,fp)!=NULL)
        printf("%s",str);
    }
    fclose(fp);
}
ログイン後にコピー

相关学习推荐:C视频教程

以上がC言語でのファイルの読み書き操作とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート