文件操作函数

1.打开文件
FILE *fopen( const char * filename, const char *mode );
参数:filename : 可以是一个用双引号括起的字面字符串/一个指向字符串的指针;
          mode     :以何种模式打开文件;

2.格式化文件输出/输入
int fprintf( FILE *fp, char *fmt, … );
参数:fp    :该指针指向要写入数据的文件;
          fmt   :格式化字符串;
          在函数原型中,省略号表示可变数目的参数;

int fscanf( FILE *fp, char *fmt, … );

3. 字符输入
用于读取文件的字符输入函数有三个: getc(), fgetc(), fgets(),前两个用于读取一个字符,最后一个函数读取一行。
(1)getc( ) 和fgetc()函数相同,它们都从指定的流中读取一个字符。
int getc( FILE *fp );
返回读取的字符;如果发生错误,则返回EOF;

int fgetc( FILE *fp );
同上。
为何它们的返回类型为int ?原因在于,读取文件时,必须能够读取文件尾标记,而在有些系统中,这种标记的类型为int 而不是 char。

int getchar(void); 只能读取 stdin 流中的字符,而不能读取文件中的字符。它具备缓冲和回显功能。
int getch(void); 读取stdin流中的字符,它不对输入字符进行缓冲,也不回显。位于头文件conio.h中。

(2)fgets( ):从文件中读取一行字符。
char *fgets( char *str, int n, FILE *fp );
参数: str : 指向缓冲区的指针,输入被存储在缓冲区中;
            n  : 要读取的最大字符数;
            fp :是一个FILE指针;
被调用后,fgets()将 fp 中的字符读入到(从str指向的位置开始的)内存中。然后不断读取字符,直到遇到换行符或读取了n-1个字符为止。
如果成功,返回 str ; 如果发生错误,则返回NULL 。

gets():从键盘读取一个字符串。当被调用时,不断从键盘读取字符,直到遇到换行符(通过Enter键生成)为止。该函数丢弃换行符,添加一个空字符。字符串被存储在函数的char指针指向的位置。如果读取出错,gets返回NULL。
char *gets( char *str );

4.字符输出
字符输出函数为:putc( ) 和 fputc()   puts() 和 fputs()
(1) putc() 和 fputc()  :将一个字符写入到指定流中去。
int putc( int ch , FILE *fp );
参数: ch : 要输出的字符;
            fp : 关联的文件指针;
如果成功,返回刚写入的字符,如果发生错误,则返回EOF;

fputc()函数与putc()相同

int putchar(int ch); 
只能读取 stdout 流中的字符,而不能读取文件中的字符。

(2) puts() 和 fputs()

int puts(char *string);
puts()只接受一个参数———指向显示的字符串的指针。由于字面字符串是一个指向字符串的指针,因此puts()可用于显示字面字符串和字符串常量。puts()显示完字符串后,自动换行。

char fputs( char *str , FILE *fp ); 将一行字符写入到流中。
参数: str   :指向一个空字符结尾的字符串;
            fp    :流指针;
将str 指向的字符写入到 fp 指向的文件中。
如果成功,返回一个非负值;如果发生错误,则返回EOF;

5.直接文件输入/输出

int fwrite ( void *buf, int size, int count, FILE *fp ); 将内存的一个数据块写入到二进制文件中。
参数: buf : 一个指向内在区域的指针;
           size: 指定了每个数据项的长度(单位为字节);
           count : 指定要写入磁盘的数据项数;
           fp      : 文件指针;
函数返回成功写入磁盘的数据项数,如果返回值小于count,则说明发生了错误。为了检查错误,通常在程序中这样使用fwrite()
if ( ( fwrite( buf, size, count, fp ) ) != count  )
frpintf( stderr, "Error wrinting to file." );

int fwrite ( void *buf, int size, int count, FILE *fp ); 将二进制文件中的一个数据块读入到内存中。
同上。

6.关闭文件
int fclose( FILE *fp );
如果成功,返回0;否则返回-1.关闭文件时,将刷新文件的缓冲区(写入到文件中)。

也可以使用fcloseall()来关闭除标准流(stdin, stdout, stderr, stdprn, stdaux)之外的所有流。
int fcloseall( void );
该函数刷新所有的缓冲区,并返回关闭的流数。

7.刷新缓冲区
可 以在不关闭流的情况下,使用库函数 fflush() 或 flushall() 来刷新流的缓冲区。当需要继续使用文件时,同时想将文件缓冲区中的数据写入到磁盘时,可使用  fflush() ; 当需要刷新所有找开的流的缓冲区时,可以使用 flushall()。
int fflush( FILE *fp );
如果文件是为写入而打开的,则fflush()将其缓冲区中的数据写入磁盘;
如果……       读取   ……                      清除其缓冲区中的内容。           如果成功,返回0;否则返回EOF。
int flushall( void );
函数返回处于打开状态的流的数目。

8.文件位置
要让位置指示器指向文件开头,可以使用库函数rewind() 。
void rewind( FILE *fp );
调用rewind后,文件的位置指示器将指向文件开头(字节0)。


要确定文件的位置指示器的值,可以使用ftell();
long ftell( FILE *fp );
该函数指出当前位置离文件开头有多少个字节(文件第一个字节的位置为0);如果发生错误,ftell()返回-1L(类型为long的-1).

要更精确地控制流的位置指示器,可以使用库函数fseek()。使用该函数可以将位置指求器指向文件的任何位置。
int fseek( FILE *fp, long offset , int origin );
参数:offset : 指示器移动的距离由offset指定(单位为字节);
          origin :  移动位置是相对什么位置,可能取三个值。
                       SEEK_SET:离文件开头;
                       SEEK_CUR:离当前位置;
                       SEEK_END:离文件末尾;
如果成功,则返回0;如果发生错误,则返回一个非零值。

9.检查文件末尾
int feof( FILE *fp );
如果没有到达文件的末尾,则函数返回0; 否则返回一个非零值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值