Latest web development tutorials

C文書リテラシー

前の章では、我々は、標準入出力デバイスのC言語処理を説明しました。 この章では、オープン、クローズ、テキストまたはバイナリファイルを作成する方法をCプログラマをご紹介します。

ファイルは、テキストまたはバイナリデータであるか否かを、バイトの一連の代表的なものです。 C言語関数のトップレベルへのアクセスを提供するだけでなく、基礎となる(OS)を提供するだけでなく、デバイスに保存されたファイルを処理するために呼び出さ。 この章では、コールファイルマネージャの重要性を説明します。

ファイルをオープンします

あなたはファイルタイプが流れを制御するために必要なすべての情報が含まれ新しいドキュメントを作成したり、既存のファイルを開く、コールはFILE型のオブジェクトを初期化しますするためにはfopen()関数を使用することができます。 ここでは、このコールのプロトタイプは次のとおりです。

FILE *fopen( const char * filename, const char * mode );

ここでは、ファイル名は次のいずれかの値を指定でき、ファイルアクセスモードモード値に名前を付けるために使用される文字列は、次のとおりです。

模式描述
r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

プロセスは、バイナリファイルである場合は、上記を交換するには、以下のアクセスモードアクセスモードを使用する必要があります。

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

ファイルを閉じます

;

ファイルを閉じるには、fcloseを()関数を使用します。 次のように関数のプロトタイプは以下のとおりです。

 int fclose( FILE *fp );

成功した場合、ファイルを閉じ、fcloseを()関数は、ファイルを閉じるときにエラーが発生し、ゼロを返し、関数はEOFを返しますこの関数は、実際には、ファイルのすべてのメモリを、バッファ内のデータを消去したファイルを閉じて、解放されます。 EOFは、ヘッダファイルstdio.hで定義された定数です。

C標準ライブラリには、ファイルを読み書きする文字または固定長文字列の形式でを押すようにさまざまな機能を提供します。

ファイルへの書き込み

ここでは最も簡単な関数のストリームへの書き込み文字です:

int fputc( int c, FILE *fp );

機能FPUTCは()出力ストリームにパラメータFPポイントの値に文字cを書き込みます。 書き込みが成功した場合、エラーが発生した場合、それは、EOFを返し、書かれた文字を返します あなたは、ストリームに書き込まれるために、NULLで終わる文字列に以下の機能を使用することができます。

int fputs( const char *s, FILE *fp );

関数fputs()は、出力ストリームにポイントをfpをするための文字列sを書き込みます 書き込みが成功した場合、エラーが発生した場合、それはEOFを返し、非負の値を返します また、int型のfprintf(FILEの* fpは、定数を使用することができるのchar *フォーマット、...)ファイルに書き込まれる文字列を記述するための関数を。 次の例を試してみてください。

注:このディレクトリが存在しない場合は、お使いのコンピュータ上のディレクトリを作成する必要があります、/ tmpディレクトリを用意していることを確認してください。

#include <stdio.h>

main()
{
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

上記のコードをコンパイルして実行された場合は、/ tmpディレクトリ、新しいファイルtest.txtの中に作成され、2つの異なる機能が2つの行を書か使用されます。 私たちは、ファイルを読んでみましょう。

ファイルを読みます

ここではファイルから1文字を読み取るための最も簡単な機能は次のとおりです。

int fgetc( FILE * fp );

fgetc関数()関数は、入力ファイルから文字がFPで指さ読み込みます。エラーがEOFを返し発生した場合、戻り値は、文字の読み取りです 以下の関数は、ストリームから文字列を読み取ることができます:

char *fgets( char *buf, int n, FILE *fp );

1文字を-機能するfgets()入力ストリームからnは、FPによって指さ読み込みます。 これは、バッファbufにコピーされた文字列を読んでそして最終的に文字列を終了するヌル文字を追加します。

最後の文字を読み込む前に関数は、ファイルまたはEOFの終わりに改行文字 '\ nは「発生した場合のみ、改行を含む文字を読むために戻ります。 また、int型関数fscanf(FILEの* fpは、定数を使用することができるのchar *フォーマット、...)ファイルから文字列を読み取るための機能を、しかし、最初の空白文字に直面して、それが読み取りを停止します。

#include <stdio.h>

main()
{
   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

上記のコードをコンパイルして実行されると、それは一部で作成されたファイルを読み込みます、以下の結果が生成されます。

1 : This
2: is testing for fprintf...

3: This is testing for fputs...

それは後ろにスペースを見つけたので、まず、関数fscanf()メソッドは、このをお読みください。次に、行の最後まで、残りを読むために)(fgetsのを呼び出します。 最後に、その全体2行目の読みにfgets()を呼び出します。

バイナリI / O機能

バイナリ入力と出力のための次の2つの関数:

size_t fread(void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);

通常、アレイまたは構造 - これらの2つの関数は、読み取りおよびメモリブロックを書き込むために使用されます。