ホームページ バックエンド開発 C#.Net チュートリアル C言語でのファイルの読み書き操作とは何ですか?

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

Jul 27, 2020 pm 01:44 PM
C言語

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語データ構造:ツリーとグラフのデータ表現と操作 C言語データ構造:ツリーとグラフのデータ表現と操作 Apr 04, 2025 am 11:18 AM

C言語データ構造:ツリーとグラフのデータ表現は、ノードからなる階層データ構造です。各ノードには、データ要素と子ノードへのポインターが含まれています。バイナリツリーは特別なタイプの木です。各ノードには、最大2つの子ノードがあります。データは、structreenode {intdata; structreenode*left; structreenode*右;}を表します。操作は、ツリートラバーサルツリー(前向き、順序、および後期)を作成します。検索ツリー挿入ノード削除ノードグラフは、要素が頂点であるデータ構造のコレクションであり、近隣を表す右または未照明のデータを持つエッジを介して接続できます。

C言語ファイルの操作問題の背後にある真実 C言語ファイルの操作問題の背後にある真実 Apr 04, 2025 am 11:24 AM

ファイルの操作の問題に関する真実:ファイルの開きが失敗しました:不十分な権限、間違ったパス、およびファイルが占有されます。データの書き込みが失敗しました:バッファーがいっぱいで、ファイルは書き込みできず、ディスクスペースが不十分です。その他のFAQ:遅いファイルトラバーサル、誤ったテキストファイルエンコード、およびバイナリファイルの読み取りエラー。

C言語でカウントダウンを出力する方法 C言語でカウントダウンを出力する方法 Apr 04, 2025 am 08:54 AM

Cのカウントダウンを出力する方法は?回答:ループステートメントを使用します。手順:1。変数nを定義し、カウントダウン数を出力に保存します。 2。whileループを使用して、nが1未満になるまでnを連続的に印刷します。 3。ループ本体で、nの値を印刷します。 4。ループの端で、n x 1を減算して、次の小さな相互に出力します。

C言語関数の返品値の種類は何ですか? C言語関数の返品値のタイプの概要? C言語関数の返品値の種類は何ですか? C言語関数の返品値のタイプの概要? Apr 03, 2025 pm 11:18 PM

c言語関数の返品値タイプには、int、float、double、char、void、およびポインタータイプが含まれます。 intは整数を返すために使用され、フロートとダブルはフロートを返すために使用され、charは文字を返します。 voidとは、関数が値を返さないことを意味します。ポインタータイプはメモリアドレスを返し、メモリの漏れを避けるように注意してください。構造またはコンソーシアムは、複数の関連データを返すことができます。

C言語関数の概念とその定義形式 C言語関数の概念とその定義形式 Apr 03, 2025 pm 11:33 PM

C言語関数は、再利用可能なコードブロック、処理のパラメーターを受信し、結果を返すことです。それはスイスの陸軍ナイフに似ており、強力であり、慎重に使用する必要があります。関数には、形式の定義、パラメーター、戻り値、関数体などの要素が含まれます。高度な使用には、関数ポインター、再帰関数、コールバック関数が含まれます。一般的なエラーはタイプの不一致であり、プロトタイプの宣言を忘れています。デバッグスキルには、変数の印刷とデバッガーの使用が含まれます。パフォーマンス最適化は、インライン関数を使用します。関数設計は、単一の責任の原則に従う必要があります。 C言語関数の習熟度は、プログラミングの効率とコードの品質を大幅に向上させることができます。

CSウィーク3 CSウィーク3 Apr 04, 2025 am 06:06 AM

アルゴリズムは、問題を解決するための一連の指示であり、その実行速度とメモリの使用量はさまざまです。プログラミングでは、多くのアルゴリズムがデータ検索とソートに基づいています。この記事では、いくつかのデータ取得およびソートアルゴリズムを紹介します。線形検索では、配列[20,500,10,5,100,1,50]があることを前提としており、数50を見つける必要があります。線形検索アルゴリズムは、ターゲット値が見つかるまで、または完全な配列が見られるまで配列の各要素を1つずつチェックします。アルゴリズムのフローチャートは次のとおりです。線形検索の擬似コードは次のとおりです。各要素を確認します:ターゲット値が見つかった場合:return true return false c言語実装:#include#includeintmain(void){i

C言語関数の基本的な要件は何ですか C言語関数の基本的な要件は何ですか Apr 03, 2025 pm 10:06 PM

C言語関数は、コードモジュール化とプログラム構築の基礎です。それらは、宣言(関数ヘッダー)と定義(関数体)で構成されています。 C言語は値を使用してパラメーターをデフォルトで渡しますが、外部変数はアドレスパスを使用して変更することもできます。関数は返品値を持つか、または持たない場合があり、返品値のタイプは宣言と一致する必要があります。機能の命名は、ラクダを使用するか、命名法を強調して、明確で理解しやすい必要があります。単一の責任の原則に従い、機能をシンプルに保ち、メンテナビリティと読みやすさを向上させます。

C言語関数の概念 C言語関数の概念 Apr 03, 2025 pm 10:09 PM

C言語関数は再利用可能なコードブロックです。彼らは入力を受け取り、操作を実行し、結果を返すことができます。これにより、再利用性が改善され、複雑さが軽減されます。関数の内部メカニズムには、パラメーターの渡し、関数の実行、および戻り値が含まれます。プロセス全体には、関数インラインなどの最適化が含まれます。単一の責任、少数のパラメーター、命名仕様、エラー処理の原則に従って、優れた関数が書かれています。関数と組み合わせたポインターは、外部変数値の変更など、より強力な関数を実現できます。関数ポインターは機能をパラメーターまたはストアアドレスとして渡し、機能への動的呼び出しを実装するために使用されます。機能機能とテクニックを理解することは、効率的で保守可能で、理解しやすいCプログラムを書くための鍵です。

See all articles