C言語ファイル操作fopen,fclose,mkdir(ファイルを閉じ、フォルダを作成し、ファイルに読み取り可能または書き込み可能があるかどうかを判断する)
1.フォルダint_を作成するmkdir(const char *path,mode_t mode); 関数名:mkdir機能:ディレクトリの使用法を確立する:int_mkdir( const char *dirname ); ヘッダライブラリ:direct.h戻り値:ディレクトリを作成し、成功したら0を返し、そうでなければ-1を返す
=====================================================
2.ファイルfopen()を開く
関数機能:ファイル関数のプロトタイプを開く:FILE*fopen(const char*path,const char*mode);必要ライブラリ:
一般的に、ファイルを開くとファイルの読み取りや書き込みが行われますが、ファイルを開くのに失敗すると、次の読み書きもうまくいかないので、fopen()の後にエラー判断や処理を行うのが一般的です.if((fin = fopen("a.txt","r")) == NULL) printf("Open file error.");
パラメータの説明:パラメータpath文字列には、開くファイルパスとファイル名が含まれ、パラメータmode文字列はストリームの形態を表します.modeには以下のいくつかの形態文字列があります:(よく使われているのは前の数だけで、後で再確認して、覚えていません)rは読み取り専用でファイルを開き、このファイルは存在しなければなりません.w書き込み専用ファイルを開き、ファイルが存在するとファイル長が0にクリアされ、そのファイル内容が消えます.ファイルが存在しない場合は、ファイルを作成します.aファイルのみを追加で開きます.ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの最後に追加されます.つまり、ファイルの元の内容が保持されます.(EOF符号保持)
rbは入力のためにバイナリファイルを開きます.wbはバイナリファイルを開くか新規作成するだけです.データの書き込みのみが許可されます.abバイナリファイルの最後にデータを追加
r+は、ファイルが存在する必要がある読み書き可能に開く.w+読み取り可能な書き込みファイルを開き、ファイルが存在するとファイル長がゼロになり、そのファイル内容が消えます.ファイルが存在しない場合は、ファイルを作成します.a+読み取り可能なファイルを追加で開きます.ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの最後に追加されます.つまり、ファイルの元の内容が保持されます.(元のEOF記号は残さない)
rb+読み書きは、データの読み取りのみを許可するバイナリファイルを開きます.wb+読み取りと書き込みは、読み取りと書き込みを許可するバイナリファイルを開くか作成します.ab+読み書きはバイナリファイルを開き、読み取りまたはファイル末にデータを追加できます.
rt+読み書きはテキストファイルを開き、読み書きを許可します.wt+読み書きが開いたり、テキストファイルを作成したりします.読み書きを許可する.at+読み書きはテキストファイルを開き、読み書きやテキスト末にデータを追加することができます.
上記の形態文字列は、rb、w+b、ab+などのb文字の組み合わせを追加し、b文字を加えて関数ライブラリが開いているファイルが純粋な文字ファイルではなくバイナリファイルであることを示すことができる.ただし、POSIXシステムでは、Linuxを含む文字は無視されます.fopen()によって作成された新しいファイルにはS_があります.IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)権限.このファイル権限もumask値を参照します.一部のCコンパイルシステムはこれらの機能を完全に提供していない可能性があります.一部のCバージョンでは、「r+」、「w+」、「a+」ではなく、「rw」、「wr」、「ar」などを使用して、読者はシステムの規定に注意しています.
==========================================================
3.ファイルfclose()を閉じるには、1つのファイルを使用した後、再誤用を防止するために閉じる必要があります.閉じるとは、ファイルポインタ変数がファイルを指さないこと、つまりファイルポインタ変数がファイルから外れていることを意味し、その後、ポインタを通じて元のファイルに対して読み書き操作を行うことができません.再び開かない限り、ポインタ変数がファイルに再ポインタされます.
fclose関数でファイルを閉じ、fclose関数呼び出しの一般的な形式は
fclose(ファイルポインタ);
例:
fclose(fp);
プログラムが終了する前にすべてのファイルを閉じる習慣を身につけなければならない.ファイルを閉じないとデータが失われる.前述のように、ファイルにデータを書き込む場合は、まずバッファにデータを送り、バッファが満たされてから正式にファイルに出力するので、データがバッファに満たされていない場合、プログラムが実行を終了すると、バッファ内のデータが失われ、fclose関数でファイルを閉じることで、バッファ内のデータをディスクファイルに出力することを回避することができます.ファイルポインタ変数が解放されます.
fclose関数も1つの値を持ち帰って、順調に閉じる操作を実行すると、戻り値は0で、そうでなければEOF(-1)を返します.ferror関数でテストできます.=================================================次のいくつかの関数の使い方を1つのプログラムで説明します.
a.txtを/testディレクトリにコピーし、名前もa.txt
/**
* Author: Gneveek
* Data: 2011-10-6
* Descripition: Clock Chen's Homework : File operation #1
* 、 a.txt /test , a.txt
*/
#include <stdio.h>
#include <direct.h> // _mkdir() ( )
int main()
{
_mkdir("test");
char c;
FILE *fin, *fout;
if((fin = fopen("a.txt","r")) == NULL)
printf("I'm so sorry,Open file error.
");
if((fout = fopen("test\\a.txt","w")) == NULL) // w , , ,
printf("I'm so sorry,Open file error.
");
while((c = fgetc(fin)) != EOF)
fputc(c,fout);
fclose(fin);
fclose(fout);
return 0;
}
================================================================ 4.ファイルが存在するか、読み取り可能か否かを判断するint access(const char*pathname,int mode);
pathname:ファイル名modeは私たちが判断する属性です.以下の値またはそれらの組み合わせを取ることができます:R_OKファイルはW_を読めますOKファイルはX_と書くことができますOKファイルはF_を実行できますOKファイルが存在する.
テストに成功すると、関数は0を返します.そうしないと、条件が一致しない場合は-1を返します.
プログラムの例を使用して、この関数を認識します.ファイル名(コマンドラインに入力)を入力し、ファイルが存在するかどうかを判断し、読み取り可能で、プロンプトが存在しないか、読み取り不可能であるかを判断します.存在し、読み取り可能でない場合は、現在のディレクトリの下でディレクトリtestを作成し、ファイルをtestにコピーします.
/**
* Author: Gneveek
* Data: 2011-10-6
* Descripition: Clock Chen's Homework : File operation #2
* 、 ( ), , ,
* , , ,
* , test, test
*/
#include <stdio.h>
#include <io.h>
#include <direct.h>
#include <string.h>
int main()
{
FILE *fin, *fout;
char filename[256];
char pathname[256] = "test\\";
scanf("%s",filename);
if(access(filename,F_OK) == -1) //
printf("This file does not exist!
");
else if(access(filename,R_OK) == -1) // ,
printf("Cann't Read!
");
else // ,
{
char c;
_mkdir("test");
strcat(pathname,filename);
fin = fopen(filename,"r");
fout = fopen(pathname,"w");
while((c = fgetc(fin)) != EOF)
fputc(c,fout);
}
return 0;
}
===================================================================