stdin:标准输入,FILE* stdin,键盘stdout:标准输出,FILE* stdout,显示器stderr :标准错误,FILE* stderr,显示器c:\code\test.txtFILE结构的变量,并填充其中的信息,使用者不必关心细节FILE*的指针来维护这个FILE结构体的变量**,这样使用起来更加方便FILE* pf; // 文件指针变量
pf是一个指向FILE数据类型的指针变量,可以使pf指向某个文件的文件信息区(是一个结构体变量)
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件
在编写程序的时候,在打开文件的同时,都会**返回一个FILE*的指针变量指向该文件**,也相当于建立了指针和文件的关系
ANSIC规定使用fopen()来打开文件,fclose()来关闭文件
// 打开文件
FILE* fopen(const char* filename, const char* mode);
// 关闭文件
int fclose(FILE* stream);
| 文件使用方式 | 含义 | 如果指定文件不存在 |
|---|---|---|
"r"(只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
"w"(只写) | 为了输出数据,打开一个文本文件 | 建立一个新的文件 |
"a"(追加) | 向文本文件尾添加数据 | 建立一个新的文件 |
"rb"(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
"wb"(只写) | 为了输出数据,打开一个二进制文件 | 建立一个新的文件 |
"ab"(追加) | 向一个二进制文件尾添加数据 | 出错 |
"r+"(读写) | 为了读和写,打开一个文本文件 | 出错 |
"w+"(读写) | 为了读和写,新建一个文件 | 建立一个新的文件 |
"a+"(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新的文件 |
"rb+"(读写) | 为了读和写,打开一个二进制文件 | 出错 |
"wb+"(读写) | 为了读和写,新建一个新的二进制文件 | 建立一个新的文件 |
"ab+"(读写) | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新的文件 |
例如
FILE* pf;
//打开文件
pf = fopen("myfile.txt", "w");
if (pf != NULL)
{
//文件操作
fputs("fopen example", pf);
//关闭文件
fclose (pf);
pf = NULL;
}
| 功能 | 函数名 | 适用于 |
|---|---|---|
| 字符输入函数 | fgetc | 所有输入流 |
| 字符输出函数 | fputc | 所有输出流 |
| 文本行输入函数 | fgets | 所有输入流 |
| 文本行输出函数 | fputs | 所有输出流 |
| 格式化输入函数 | fscanf | 所有输入流 |
| 格式化输出函数 | fprintf | 所有输出流 |
| 二进制输入 | fread | 文件 |
| 二进制输出 | fwrite | 文件 |
int fgetc(FILE* stream)stream获取下一个字符(一个无符号字符),并把位置标识符往前移动stream -> 指向FILE对象的指针,该FILE对象标识了要在上面执行操作的流fgetc()以unsigned char强制转换为int的形式返回读取的字符EOFchar指定的字符(一个无符号字符)写入到指定的流stream中,并把位置标识符往前移动char:要被写入的字符,该字符以其对应的int值进行传递stream:指向FILE对象的指针,该FILE对象标识了要被写入字符的流EOF,并设置错误标识符stream读取,并把它存储在str所指向的字符串内n-1个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定str:指向一个字符数组的指针,该数组存储了要读取的字符串n:要读取的最大字符数(包括最后的空字符),通常是使用以str传递的数组长度stream:指向FILE对象的指针,该FILE对象标识了要从中读取字符的流str参数str的内容保持不变,并返回一个空指针函数原型:`int fputs(const char* str, FILE* stream)
功能:把字符串写入到指定的流stream中,但不包括空字符
参数:
str:是一个数组,包含了要写入的以空字符终止的字符序列
stream:指向FILE对象的指针,该FILE对象标识了要被写入字符串的流返回值:该函数返回一个非负值,如果发生错误则返回EOF
int fscanf(FILE* stream, const char* format, ...)stream读取格式化输入stream:指向FILE对象的指针,该FILE对象标识了流format :格式说明符,使用形式同scanfEOFint fprintf(FILE* stream, const char* format, ...)stream中stream:指向FILE对象的指针,该FILE对象标识了流format:格式说明符,使用方式同printfsize_t fread(void* ptr, size_t size, size_t n, FILE* stream)stream读取数据到ptr所指向的数组中ptr:指向带有最小尺寸size * n字节的内存块的指针size:要读取的每个元素的大小,以字节为单位n:元素的个数,每个元素的大小为size字节stream:指向FILE对象的指针,该FILE对象指定了一个输入流size_t对象返回,size_t对象是一个整型数据类型n参数不同,则可能发生了一个错误或者到达了文件末尾size_t fwrite(const void* ptr, size_t size, size_t n, FILE* stream)ptr所指向的数组中的数据写入到给定流stream中ptr:指向要被写入的元素数组的指针size:要被写入的每个元素的大小,以字节为单位。n:元素的个数,每个元素的大小为size字节stream:指向FILE对象的指针,该FILE对象指定了一个输出流size_t对象,表示元素的总数,该对象是一个整型数据类型n参数不同,则会显示一个错误