- c库函数的文件操作独立于具体的操作系统平台,不管是在DOS、Windows、Linux还是在vxworks中都是这些函数;
- fopen:创建和打开:
FILE * fopen(const char *filename,const char*mode)
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
FILE *fp2;
char ch;
if(fp = fopen("./practise1.c","r")) == NULL);
{
printf("cannot open file,strike any key essit!");
perror("error");
exit(1);
}
if(fp2 = fopen("./copy.c","r")) == NULL);
{
printf("cannot open file,strike any key essit!");
perror("error");
exit(1);
}
ch = fegtc(fp);
while(ch != EOF)
{
putchar(ch); //输出到屏幕
fputc(ch,fp2); //将字符写入到fp2中;
ch = fgetc(fp);
}
fclose(fp);
return 0;
}
filename:打开的文件名(包含路径,缺省为当前路径);
mode:打开模式,共有7中模式:
mode | 含义 |
“r” | 只读,文件必须存在; |
“w” | 只写,如果文件不存在则创建,如果文件已存在则先把文件长度截断为0(即先将文件清空),再往里写内容,也就是替换原来的文件内容; |
“r+” | 允许读和写,文件必须已存在; |
“w+” | 允许读和写,如果文件不存在则创建,若存在则先将文件清空再重写写内容; |
“a” | 只能在文件末尾追加数据,如果文件不存在则创建; |
“a+” | 允许读和追加数据,如果文件不存在则创建; |
“b” | 用于区分二进制文件和文本文件(DOS、Windows); 因为linux不区分二进制文件和文本文件,所以b基本不用; |
3. fread:读
size_t fread(void *ptr, size_t size, size_t n,FILE *stream)
从stream指向的文件中读取n个字段,每字段为size字节,并将读取的数据放入ptr所指的字符数组中;函数返回值是已读取的字段数;(从后向前)
double name[10];
int ret;
ret = fread(name,sizeof(double),10,fp);
//调用函数将fp文件中10个double值复制到name数组中;
4.fwrite:写
size_t fwrite(const void *ptr, size_t size, size_t n,FILE *stream)
从缓冲区ptr(数组)中把n个字段写到stream指向的文件中,每个字段长为size个字节,返回值是实际写入的字段数;(从前向后)
char name[40];
fwrite (name,1,25,fp);
//从name数组中中读取25个字节到fp指定的文件中;
5. fgetc:读字符
int fgetc(FILE *stream)
从指定的文件中读一个字符,程序详见第一个程序段;
6. fputc:写字符
int fputc(int c,FILE *stream)
向指定的文件中写入一个字符,程序详见第一个程序段;