目录
一、文件
1.使用文件我们可以将数据直接存放在电脑的硬盘上,做到数据的持久化。
2.文件分为俩种:程序文件、数据文件
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj)
可执行程序(windows环境下后缀为.exe)
3.文件名:一个文件需要有一个唯一的文件表示,
例如:c:\code\test.txt
文件名包含3部分:
文件路径c:\code
文件主干:\test
文件后缀 .txt
二、文件的打开和关闭
2..1文件指针
每个被使用的文件都会在内存中开辟一个文件信息区,每个文件信息区都会通过一个FILE*
指针来维护。
2.2 文件的打开
FILE * fopen ( const char * filename, const char * mode );filename:要打开文件名称的C字符串
mode:模式
返回:与文件相关联的文件信息区的地址
2.3 文件的关闭
int fclose ( FILE * stream );stream:指向指定要关闭的流的 FILE 对象的指针。
返回值: 成功关闭:返回零值。
失败:返回EOF
int main() { //打开 FILE* pf = fopen("data.txt","r"); if (NULL == pf) { perror("fopen"); return -1; } //读写 //关闭 fclose(pf); pf = NULL; return 0; }
三、文件的顺序读写
3.1 fputc
int fputc ( int character, FILE * stream );
定义:向流写入一个字符并前进位置指示器。
字符写在流的内部位置指示器指示的位置,然后自动前进一个。character:要写的字符的int推广,写入时,该值在内部转化为无符号字符
stream: 只想标识输入流的FILE对象的指针
返回值:成功:返回所写字符
写入错误:返回EOF,并设置错误指示器(ferror)
每写入一个字符,指针就会往后移动一个位置
3.2 fgetc
int fgetc ( FILE * stream );定义:返回指定流的内部文件位置指示器当前所指向的字符。然后,内部文件位置指示器将前进到下一个字符。如果流在调用时位于文件末尾,则该函数将返回 EOF 并设置流的文件末尾指示符 (feof)。如果发生读取错误,该函数将返回 EOF 并设置流(ferror)的错误指示器。fgetc 和 getc 是等效的,除了 getc 在某些库中可以作为宏实现。
stream:指向标识输入流的FILE对象的指针
返回值:
成功时,将返回字符读取(提升为 int 值)。
返回类型为 int 以适应特殊值 EOF,这表示失败:
如果位置指示器位于文件末尾,则该函数返回 EOF 并设置流的 eof 指示符 (feof)。
如果发生其他读取错误,该函数也会返回 EOF,但会改为设置其错误指示器(ferror)。
3.3 fputs
int fputs ( const char * str, FILE * stream );
str:写入流里面的字符串
stream:指向标识输入流的FILE对象的指针返回值:成功时,返回非负值,失败时,返回EOF ,并设置误差指示器(ferror)
3.4 fgets
char * fgets ( char * str, int num, FILE * stream );
str:存储字符串的数组的指针
num:要复制到str中的最大字符数,包括终止符,也就是如果num等于3,是只复制了前2位,第三位为'\0'
stream:指向标识输入流的 FILE 对象的指针。
stdin 可以用作从标准输入读取的参数。
3.5 fprintf
int fprintf ( FILE * stream, const char * format, ... );//将格式化数据写入流
stream:指向标识输出流的 FILE 对象的指针。
format:包含要写入流的文本的 C 字符串。它可以选择包含嵌入的格式说明符,这些说明符将替换为后续附加参数中指定的值,并按请求进行格式化。
返回值:成功时,将返回写入的字符总数。
如果发生写入错误,则设置错误指示器(ferror)并返回负数。
如果在写入宽字符时发生多字节字符编码错误,则 errno 将设置为 EILSEQ 并返回负数。
3.6 fscanf
int fscanf ( FILE * stream, const char * format, ... );
定义:从流中读取数据,并根据参数格式将它们存储到附加参数所指向的位置。
stream:指向 FILE 对象的指针,该对象标识要从中读取数据的输入流。
format:C 字符串,包含一系列字符
返回值:成功时,该函数返回已成功填充的参数列表中的项数。此计数可以与预期的项目数匹配,也可以由于匹配失败、读取错误或文件末尾的范围而减少(甚至为零)。如果发生读取错误或在读取时到达文件末尾,则设置正确的指示器(feof 或 ferror)。而且,如果在成功读取任何数据之前发生任何一种情况,则会返回 EOF。如果在解释宽字符时发生编码错误,则该函数会将 errno 设置为 EILSEQ。
3.7 fwrite
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
定义:写到文件中去,写入一个计数元素数组,每个元素的大小为字节,从 ptr 指向流中的当前位置的内存块。
ptr:
指向要写入的元素数组的指针,转换为 const void*。
size:
要写入的每个元素的大小(以字节为单位)。
size_t是无符号整数类型。count:
元素数,每个元素的大小为字节大小。
size_t是无符号整数类型。stream:
指向指定输出流的 FILE 对象的指针。
3.8 fread
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
定义:从流(文件)中读取计数元素数组,每个元素的大小为字节,并将它们存储在 ptr 指定的内存块中。
流的位置指示器按读取的总字节数提前。如果成功,则读取的总字节数为(大小*计数)。ptr:指向大小至少为(大小*计数)字节的内存块的指针,转换为 void*。
size:要读取的每个元素的大小(以字节为单位)。
size_t是无符号整数类型。count:元素数,每个元素的大小为字节大小。
size_t是无符号整数类型。stream:指向指定输入流的 FILE 对象的指针。
四、随机读写
4.1 fseek
int fseek ( FILE * stream, long int offset, int origin );
定义:对于以二进制模式打开的流,通过将偏移量添加到由原点指定的参考位置来定义新位置。
对于在文本模式下打开的流,偏移量应为零或先前调用 ftell 返回的值,并且源必须SEEK_SET。
stream:指向表示流的FILE对象的指针
offset:
二进制文件:要从源偏移的字节数。
文本文件:零或 ftell 返回的值。origin:
返回值:
如果成功,该函数返回零。
否则,它将返回非零值。
如果发生读写错误,则设置误差指示器(ferror)。
4.2 ftell
long int ftell ( FILE * stream );//获取流中的当前位置
stream:指向标识流的 FILE 对象的指针。
返回值:
成功时,将返回仓位指标的当前值。
失败时,返回 -1L,并将 errno 设置为特定于系统的正值。
4.3 rewind
void rewind ( FILE * stream );
stream:指向标识流的 FILE 对象的指针。
无返回值
本篇为c语言文件操作的相关内容,如有错误,请评论区多多评论^_^