C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

Cプログラミングにおけるファイル処理の基本


ファイル処理 プログラムを使用してファイルにデータを保存することです。 Cプログラミング言語では、プログラムはファイル処理を使用して、プログラムの結果やその他のデータをファイルに保存します。 また、ファイルからデータを抽出/フェッチして、プログラムで使用することもできます。

Cのファイルに対して実行できる操作は次のとおりです-

  • 新しいファイルを作成する

  • 既存のファイルを開く

  • 既存のファイルからのデータの読み取り

  • ファイルへのデータの書き込み

  • ファイル上の特定の場所にデータを移動する

  • ファイルを閉じる

fopen()を使用したファイルの作成またはオープン

fopen()関数は、Cで新しいファイルを作成したり、既存のファイルを開いたりするために使用されます。fopen関数は、 stdio.hで定義されています。 ヘッダーファイル。

それでは、新しいファイルを作成したり、ファイルを開いたりするための構文を見てみましょう

file = fopen(“file_name”, “mode”)

これは、Cでファイルを開くことと作成することの両方に共通の構文です。

パラメータ

file_name −fopenメソッドを使用して開くまたは作成するファイルの名前を指定する文字列です。 mode:ファイルを開くモードを指定する文字列(通常は1文字)です。 Cでファイルを開くために使用できるさまざまなモードがあります。これらすべてについては、この記事の後半で説明します。

ファイルはいつ作成されますか?

fopen関数は、指定された場所に指定された名前のファイルが見つからない場合に、新しいファイルを作成します。それ以外の場合、ファイルが見つかった場合は、指定されたモードで開かれます。

概念を明確にする例を見てみましょう。fopen関数を使用してhello.txtという名前のファイルを開いているとします。以下はステートメントになります

file = fopen(“hello.txt”, “w”)

これにより、現在のディレクトリでhello.txtという名前のファイルが検索されます。ファイルが存在する場合はファイルを開き、存在しない場合は「hello.txt」という名前の新しいファイルを作成し、書き込みモード(「w」を使用して指定)で開きます。

それでは、Cでファイルの読み取りまたは書き込みに使用できるすべてのタイプのモードと、コードのサンプル実行を示すコードスニペットを見てみましょう。

モード=「r」 −読み取り用に開く、このモードは読み取り目的でのみファイルを開きます。つまり、コンテンツは表示のみ可能で、編集などは実行できません。

このモードでは新しいファイルを作成できず、 open()はNULLを返します 、このモードを使用して新しいファイルを作成しようとした場合。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "r")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using r mode");
   fclose(file);
   return 0;
}

出力

File opened successfully in read mode

現在のディレクトリにhello.txtという名前のファイルを作成しましたが、他のファイルにアクセスしようとすると、「ファイルが存在しません! 「rモード」を出力として使用して新しいファイルを作成することはできません。

モード=「rb」 −バイナリモードで読み取るために開くこのモードでは、ファイルをバイナリモードでのみ読み取るために開きます。つまり、コンテンツは表示のみが可能で、編集などは実行できません。

このモードでは新しいファイルを作成できず、 open()はNULLを返します 、このモードを使用して新しいファイルを作成しようとした場合。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("program.txt", "rb")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using rb mode");
   fclose(file);
   return 0;
}

出力

ファイルが存在しません! rbモードを使用して新しいファイルを作成することはできません

モード=「w」 −書き込み専用で開く。このモードは、書き込み専用で現在のディレクトリに存在する場合、つまり読み取り操作を実行できない場合にファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、書き込み用に開きます。

テキストを含むファイルを開くと、内容が上書きされます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("helo.txt", "w")){
      printf("File opened successfully in write mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

File opened successfully in write mode or a new file is created

ここで、ディレクトリに存在しないファイル「helo.txt」を開こうとしましたが、「helo.txt」という名前のファイルが作成されたため、関数は成功メッセージを返しました。

モード=「wb」 −バイナリモードでの書き込み用に開く。このモードは、バイナリモードでの書き込み用に現在のディレクトリに存在する場合、つまり読み取り操作を実行できない場合にファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、バイナリモードで書き込むためにそれを開きます。

テキストを含むファイルを開くと、内容が上書きされます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "wb")){
      printf("File opened successfully in write in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

バイナリモードでの書き込みでファイルが正常に開かれたか、新しいファイルが作成されました

モード=「a」 −追加専用で開く。このモードは、現在のディレクトリに書き込み専用で存在する場合、つまり読み取り操作を実行できない場合にファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、書き込み用に開きます。テキストを含むファイルを開いても、内容は上書きされません。代わりに、ファイル内の既存のテキストの後に新しいテキストが追加されます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "a")){
      printf("File opened successfully in append mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

File opened successfully in append mode or a new file is created

モード=「ab」 −バイナリで追加するために開く。このモードは、現在のディレクトリに存在する場合、バイナリでのみ書き込むためにファイルを開きます。つまり、読み取り操作は実行できません。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、バイナリで書き込むためにそれを開きます。

テキストを含むファイルを開いても、内容は上書きされません。代わりに、ファイル内の既存のテキストの後に新しいテキストが追加されます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "ab")){
      printf("File opened successfully in append in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

File opened successfully in append in binary mode or a new file is created

モード=「r+」 −読み取りと書き込みの両方で開くこのモードでは、読み取りと書き込みの両方の目的でファイルが開きます。つまり、ファイルに対して読み取りと書き込みの両方の操作を実行できます。

このモードでは新しいファイルを作成できず、 open()はNULLを返します 、このモードを使用して新しいファイルを作成しようとした場合。

テキストを含むファイルを開いて何かを書くと、内容が上書きされます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "r+")){
      printf("File opened successfully in read and write both");
   }
   else
   printf("The file is not present! cannot create a new file using r+ mode");
   fclose(file);
   return 0;
}

出力

File opened successfully in read and write both

現在のディレクトリにhello.txtという名前のファイルを作成しましたが、別のファイルにアクセスしようとすると、「ファイルが存在しません! 「r+モード」を出力として使用して新しいファイルを作成することはできません。

モード=「rb+」 −バイナリモードで読み取るために開くこのモードでは、ファイルをバイナリモードでのみ読み取るために開きます。つまり、コンテンツは表示のみが可能で、編集などは実行できません。

このモードでは新しいファイルを作成できず、 open()はNULLを返します このモードを使用して新しいファイルを作成しようとした場合。

テキストを含むファイルを開いて何かを書くと、内容が上書きされます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("program.txt", "rb+")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using rb+ mode");
   fclose(file);
   return 0;
}

出力

The file is not present! cannot create a new file using rb+ mode

モード=「w」 −書き込みと読み取りのために開く。このモードは、書き込みと読み取りの両方の操作のために現在のディレクトリに存在する場合、ファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、読み取りと書き込みのために開きます。

テキストを含むファイルを開くと、内容が上書きされます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("helo.txt", "w+")){
      printf("File opened successfully in read-write mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

File opened successfully in read-write mode or a new file is created

ここで、ディレクトリに存在しないファイル「helo.txt」を開こうとしましたが、「helo.txt」という名前のファイルが作成されたため、関数は成功メッセージを返しました。

Mode =“ wb +”:バイナリモードでの書き込みと読み取りのために開きます。このモードは、書き込みと読み取りのために現在のディレクトリに存在する場合、ファイルを開きます

バイナリモード。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、バイナリモードで読み書きできるように開きます。テキストを含むファイルを開くと、内容が上書きされます。

>

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "wb+")){
      printf("File opened successfully in read-write in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

File opened successfully in read-write in binary mode or a new file is created

モード=「a+」 −読み取りと追加のために開く。このモードは、読み取りと書き込みの両方で現在のディレクトリに存在する場合、ファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、読み取りと書き込みのために開きます。

テキストを含むファイルを開いても、内容は上書きされません。代わりに、ファイル内の既存のテキストの後に新しいテキストが追加されます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "a+")){
      printf("File opened successfully in read-append mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

出力

ファイルが読み取り追加モードで正常に開かれたか、新しいファイルが作成されました

モード=「ab+」 −バイナリでの読み取りと追加のために開く。このモードは、バイナリでの読み取りと書き込みの両方のために現在のディレクトリに存在する場合、ファイルを開きます。ファイルが現在のディレクトリに存在しない場合、プログラムは新しいファイルを作成し、バイナリでの読み取りと書き込みのためにそれを開きます。テキストを含むファイルを開いても、内容は上書きされません。代わりに、ファイル内の既存のテキストの後に新しいテキストが追加されます。

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "ab+")){
      printf("File opened successfully in read-append in binary mode or a new file is created");
   }
   else
   printf("Error!”);
   fclose(file);
   return 0;
}

出力

File opened successfully in read-append mode or a new file is created

既存のファイルからのデータの読み取り

fscanf()およびfgets()およびfgetc()関数を使用して、cのファイルの内容を読み取ることができます。すべてファイルの内容を読み取るために使用されます。各関数の動作を見てみましょう-

fscanf()

fscanf()関数は、ファイルから文字セット、つまり文字列を読み取るために使用されます。ファイルのすべてのコンテンツが読み取られると、EOFが返されます。

構文

int fscanf(FILE *stream, const char *charPointer[])

パラメータ

FILE *stream: the pointer to the opened file.
const char *charPointer[]: string of character.

#include <stdio.h>
int main(){
   FILE * file;
   char str[500];
   if (file = fopen("hello.txt", "r")){
         while(fscanf(file,"%s", str)!=EOF){
         printf("%s", str);
      }
   }
   else
   printf("Error!”);
   fclose(file);
   return 0;
}

出力

LearnprogrammingattutorialsPoint

fgets()

Cのfget()関数は、ストリームから文字列を読み取るために使用されます。

構文

char* fgets(char *string, int length, FILE *stream)

パラメータ

char *string: It is a string which will store the data from the string.
int length: It is an int which gives the length of string to be considered.
FILE *stream: It is the pointer to the opened file.

#include <stdio.h>
int main(){
   FILE * file;
   char str[500];
   if (file = fopen("hello.txt", "r")){
      printf("%s", fgets(str, 50, file));
   }
   fclose(file);
   return 0;
}

出力

Learn programming at tutorials Point

fgetc()

Cのfgetc()関数は、ファイルから1文字を返すために使用されます。ファイルから文字を取得し、ファイルの終わりにEOFを返します。

構文

char* fgetc(FILE *stream)

パラメータ

FILE *stream: It is the pointer to the opened file.

#include <stdio.h>
int main(){
   FILE * file;
   char str;
   if (file = fopen("hello.txt", "r")){
      while((str=fgetc(file))!=EOF)
      printf("%c",str);
   }
   fclose(file);
   return 0;
}

出力

Learn programming at tutorials Point

Cのファイルへのデータの書き込み

fprintf()、fputs()、fputc()関数を使用して、Cのファイルにデータを書き込むことができます。すべてファイルにコンテンツを書き込むために使用されます。

各関数の動作を見てみましょう-

fprintf()

fprintf()関数は、ファイルにデータを書き込むために使用されます。一連の文字をファイルに書き込みます。

構文

int fprintf(FILE *stream, char *string[])

パラメータ

FILE for *stream: It is the pointer to the opened file.
char *string[]: It is the character array that we want to write in the file.

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      if(fprintf(file, "tutorials Point”) >= 0)
      printf("Write operation successful");
   }
   fclose(file);
   return 0;
}

出力

Write operation successful

fputf()

Cのfputf()関数を使用して、ファイルに書き込むことができます。ファイルに行(文字行)を書き込むために使用されます。

構文

int fputs(const char *string, FILE *stream)

パラメータ

Constant char *string[]: It is the character array that we want to write in the file.
FILE for *stream: It is the pointer to the opened file.

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      if(fputs("tutorials Point", file) >= 0)
      printf("String written to the file successfully...");
   }
   fclose(file);
   return 0;
}

出力

String written to the file successfully…

fputc()

fputc()関数は、ファイルに1文字を書き込むために使用されます。

構文

int fputc(char character , FILE *stream)

パラメータ

char character : It is the character that we want to write in the file.
FILE for *stream: It is the pointer to the opened file.

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      fputc('T', file);
   }
   fclose(file);
   return 0;
}

出力

‘T’ is written to the file.

fclose()

fclose()関数は、開いているファイルを閉じるために使用されます。ファイルに対して操作を実行した後、ファイルを閉じて、適用した操作を保存する必要があります。

構文

fclose(FILE *stream)

パラメータ

FILE for *stream: It is the pointer to the opened file.

#include <stdio.h>
int main(){
   FILE * file;
   char string[300];
   if (file = fopen("hello.txt", "a+")){
      while(fscanf(file,"%s", string)!=EOF){
         printf("%s", string);
      }
      fputs("Hello", file);
   }
   fclose(file);
   return 0;
}

出力

LearnprogrammingatTutorialsPoint

ファイルに含まれる

Learn programming at Tutorials PointHello

  1. C++での例外処理の基本

    C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。 例外は、C ++標準では、プログラム内で使用できるクラスとして定義されています。親子クラス階層の配置を以下に示します。 C++の一般的な例外クラスは次のとおりです。 例外 説明 std ::exception これは、すべての標準C++例外の例外および親クラスです。 std ::

  2. Pythonを使用してファイルのモードを変更するにはどうすればよいですか?

    ファイルの権限を変更するには、os.chmod(file、mode)呼び出しを使用できます。モードは8進表現で指定する必要があるため、0oで開始する必要があることに注意してください。たとえば、ファイルを読み取り専用にするには、権限を0o777に設定し、次を使用できます。 >>> import os >>> os.chmod('my_file', 0o777) statモジュールのフラグを使用することもできます。これらのフラグの詳細については、http://docs.python.org/2/library/stat.htmlを参照してくださ