C语言中的文件操作

本次详细介绍C下文件的各种API.

1. 文件的打开与关闭

1)打开文件

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

返回文件句柄,非NULl为正确打开。
2)关闭文件

int fclose(    FILE * stream);

例子:

    FILE * pSrc = fopen("DATA5610.TXT", "r");
    if (pSrc == NULL)
    {
        printf("can't open file\n");
        return 0;
    }

2. 按照固定格式读写文件(适用于文本格式

1)fscanf从文件中按照固定格式读取

fscanf适用于读取以文本格式打开的文件。并且,文本的读取必须按照固定的格式(format)读取。类似于scanf,只不过数据是从文件中读取,而非标准的显示屏中。

int fscanf(    FILE * stream, 
   const char * format[, argument]... 
);

2)fprintf按照固定格式写入文件中
类似于printf,只不过数据是保存在文件中,而非标准的显示屏中。

int fprintf(    FILE* stream,const char * format [, argument ]...);

例子:

    while ( fscanf(pSrc, "%d%s", &i, str)!=EOF )
    {
        fprintf(pDest, "%d--%s", i, str);
    }

3. 按字节读写文件

1)fgetc适合于从文件中一次读取一个字节

int fgetc(    FILE * stream);

fgetc 适合于一次从文件中读取一个字节,并且每个字节被当作一个无符号的8位(二进制)数,取值范围为0-255,类似于getchar()

int getchar(    void );

2)fputc适用于向文件中依次读入一个字节

int fputc(    int c,FILE * stream);

类似于putchar()

int putchar(    int c);

例子:

    while ( (c= fgetc(pSrc)) != EOF )
        fputc(c, pDest);

4. 按行读写文件

1) fgets一次从文件中读取一行,包括换行符,并在字符串的最后添加'\0'

char *fgets(    char * string,int n,FILE * stream);

其中, n表示的为string中最大保存的字符数,通常,为了预留一位保存'\0',长度通常取(sizeof(string)-1)

2)fputs一次向文件中写入一行数据

int fputs(    const char * string,FILE * stream);

例子:

    while ( fgets(str, sizeof(str)-1, pSrc) )
        fputs(str, pDest);

getsputs函数的区别

gets函数从标准流stdio中读取数据,不判断上界,直到读取到'\n'或者EOF才停止。换行符 不作为读取的字符串的内容,而是被转化为'\0'保存在指定的内存空间中。
puts函数是一个将制定字符串输入到标准输出流stdout中,输出的停止标志位读取到字符串中的'\0',但是,puts会在输出字符串之后自动输出一个换行符。也就是说puts(char * s)printf("%s\n", s)的作用是相同的。

5. 按照数据块读写文件

1)fread从文件中读

size_t fread(    void * buffer,size_t size,size_t count,FILE * stream);

fread从文件中读取count*size字节的数据,或者说读取countsize字节大小的数据,并保存到buffer指向的内存中。
返回值为成功读取的size大小的数据块的个数。

2)fwrite向文件中写

size_t fwrite(    const void*buffer,size_t size,size_t count,FILE*stream);

fwritebuffer指向的内存中的countsize大小的数据写入到文件中。返回值表示成功写入的数据个数count。
例子:

    while ( fread(&buffer, sizeof(struct stru), 10, pSrc) )
        fwrite(&buffer, sizeof(struct stru), 10, pDest);

6. 从特定位置随机读写文件中的数据

int fseek(FILE * stream,long offset,int origin );

该函数将指向文件stream的文件指针设置到距离originoffset偏移字节处的地方。

origin的取值:
SEEK_SET:文件开始处;
SEEK_CUR:执行本函数之前,文件指针所在位置;
SEEK_END:文件结尾处

另外,fseek函数通常与freadfwrite一同完成从某个特定位置读写数据。
例子:

fseek(pSrc, 1, SEEK_SET); //从文件开始处偏移一个字节
fread(&buffer, sizeof(char), 6, pSrc); //从偏移处读取6*sizeof(char)个数据
fwrite(&buffer, sizeof(char), 6, pDest); //从偏移处读取6*sizeof(char)个数据存入文件pDest中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值