C++文件操作常用函数
fopen
fclose
ftell
fread
fseek
fopen
功能:打开文件
定义函数 : FILE * fopen(const char * path,const char * mode);
输入参数: path字符串包含欲打开的文件路径及文件名
mode字符串则代表着流模式。常见模式为r(只读),r+(可读写),w(只写),w+(可读写)
注:1. mode字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b字符代表打开的文件为 二进制文件。 2.使用此函数必须保证欲打开文件存在,否则输出返回错误。
返回参数: 文件顺利打开后,返回指向该流的文件指针。
文件打开失败返回NULL,并把错误代码存在errno中。
范例
#include<stdio.h>
main()
{
FILE * fp;
char const* fileName="D:\readme.ts";
fp= fopen( fileName, "rb" );
if(fp= =NULL) return;
fclose(fp);
}
.fprintf
功能:传送格式化输出到一个文件中
函数原型:int fprintf(FILE *stream,char *format[, argument,...]);
输入参数:FILE* 一个FILE型的指针
char*格式化输入函数,和printf里的格式一样
返回参数:成功时返回转换的字节数,失败时返回一个负数
举例:
fp =fopen("/local/test.c","a+");
fprintf(fp,"%s\n",str);
fscanf
功能:从一个流中执行格式化输入
函数原型:intfscanf(FILE *stream, char *format[,argument...]);
输入参数:FILE* 一个FILE型的指针
char* 格式化输出函数,和scanf里的格式一样
返回参数:成功则返回转换的字节数,
失败则返回一个负数
范例:
fp =fopen("/local/test.c","a+");
fscanf(fp,"%s",str);
fclose
功能:关闭文件
定义函数 int fclose(FILE *stream);
输入参数:FILE * stream 打开的文件流
返回参数: 成功则返回0,
失败返回EOF并把错误代码存到errno。
范例
参考fopen()。
fseek
功能:移动文件流的读写位置
定义函数int fseek(FILE * stream,long offset,int whence);
输入参数 stream为已打开的文件指针
offset为根据参数whence来移动读写位置的位移数。
whence为下列其中一种:
SEEK_SET从距文件开头offset位移量为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offset允许负值的出现。
下列是较特别的使用方式:
1) 欲将读写位置移动到文件开头时:fseek(FILE*stream,0,SEEK_SET);
2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);
返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。
附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。
范例
#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,&pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}
执行 offset = 5
offset =0
offset=10
ftell
功能:取得文件流的读取位置
定义函数 long ftell(FILE *stream);
输入参数 stream为已打开的文件指针。
返回值 成功时则返回目前的读写位置
错误则返回-1,errno会存放错误代码。
错误代码 EBADF 参数stream无效或可移动读写位置的文件流。
范例 参考fseek()。
fwrite
功能:将数据写至文件流
定义函数 size_t fwrite(const void* ptr,size_t size,size_t nmemb,FILE * stream);
输入参数 stream为已打开的文件指针,
参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定
返回值 实际写入的nmemb数目。
范例
#include<stdio.h>
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
执行 参考fread()。
fread
作用:从文件中读入数据到指定的地址中
函数原型:size_tfread(void* buff,size_t size,size_t count,FILE*)
输入参数:第一个参数buff为接收数据的指针(buff),也即数据存储的地址
第二个参数size为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节
第三个参数count为元素个数,即要读取的数据大小为size的元素个素
第四个参数stream 为提供数据的文件指针,该指针指向文件内部数据
返回值:读取的总数据元素个数
范例:
int num,count;
int*pr=new int[num*count];
fread(pr,num*4, count, stream); // stream为fopen中返回的FILE指针
要将数据写入pr中,必须为pr分配内存,一个int为4个字节,所以要x4