浅谈C/C++中文件操作

#fopen
函数功能:打开一个文件
函数原型:FILE fopen(const char path,const char *mode);
所需库:
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()之后要作错误判断及处理。

程序示例:

#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
int main()
{
    FILE *fp=NULL;        //需要注意
    fp=fopen(F_PATH,"r");  //也可以直接用文件名代替F_PATH
    if(NULL==fp)
    {
        return -1;        //要返回错误代码
    }
    fclose(fp);
    fp=NULL;             //需要指向空,否则会指向原打开文件地址
    return 0;
}

注意:
在文件操作时,需要注意以下几点问题:

  1. 在定义文件指针时,要将文件指针指向空,如FILE *fp=NULL;
  2. 文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。
  3. 文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦。

#fprintf

fprintf是C/C++中的一个格式化写,其作用是格式化输出到一个流(比如stderr)或文件中;
函数原型:int fprintf(FILE stream,const char format,[argument]);
所需库:
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件;
返回值:若成功则返回输出字符数,若输出出错则返回负值

程序示例
示例一:

#include <stdio.h>
int main()
{
    FILE *in,*out;
    if((in=fopen("\\AUTOEXEC.BAT","rt"))==NULL)
    {
        fprintf(stderr,"Cannot open input file.\n"); //输出到流stderr(标准错误输出,类似标准输入stdin、输出stdout)
        return 1;
    }
    if((out=fopen("\\AUTOEXEC.BAT","wt"))==NULL)
    {
        fprintf(stderr,"Cannot open output file.\n");
        return 1;
    }
    while(!feof(in))
        fputc(fgetc(in),out);
    fclose(in);
    fclose(out);
    return 0;
}

示例二

#include <stdio.h>
#include <stdlib.h>
#include <process.h>
FILE *stream;
int main()
{
    int i=10;
    double fp=1.5;
    char s[]="this is a string";
    char c= '\n';
    stream=fopen("fprintf.out","w");
    fprintf(stream,"%s%c",s,c);
    fprintf(stream,"%d\n",i);
    fprintf(stream,"%f\n",fp);
    fclose(stream);
    system("type fprintf.out");        //在屏幕上打印出fprintf.out中的内容
    return 0;
}

屏幕输出:    
this is a string      
10      
1.500000

#fscanf

功能:从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束
用法:int fscanf(FILE stream,const char format,[argument…]);
FILE stream:文件指针
char
format: 格式字符串
[argument…]: 输入列表
例如:

FILE *fp;
char a[10];
int b;
double c;
fscanf(fp,"%s%d%lf",a,&b,&c)

返回值:整形,成功读入的参数的个数

#fclose

功能:关闭一个流。注意,使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
用法:int fclose(FILE *stream);
如果流成功关闭,fclose返回0,否则返回EOF(-1)