C语言文件函数

打开与关闭文件

打开文件

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

返回值:成功返回一个文件指针,失败返回NULL

参数:

  • *path:文件路径及文件名
  • *mode:打开文件方式

关闭文件

int fclose( FILE *fp );

返回值:成功返回0,失败返回EOF

参数:

  • *fp:需要关闭的文件指针

读写文件

读取字符

int fgetc(FILE *fp);

返回值:返回所读取的一个字节,若读到文件末尾时返回EOF(文件结束标识符,-1)

参数:

  • *fp:文件指针,读取一个字符,指针后移一个字节

写入字符

int fputc(char c, FILE *fp);

返回值:字符的ASCII码值

参数:

  • c:要写入的字符
  • *fp:文件指针,写入一个字符,文件内部写指针会自动后移一个字节

eg:循环读出字符

FILE *fp = fopen("des_plain.txt","r");
char s;  
while ((s = fgetc(fp)) != EOF) 
{
    fputc(s, stdout);
}
fclose(fp);

读取字符串

char *fgets(char *buf, int bufsize, FILE *fp);

返回值:成功返回buf,失败或读到文件末尾返回NULL(一次不能根据fgets返回值来判断是否出错,而是用feof函数)

参数:

  • *buf:字符型指针,存储所得数据的地址
  • bufsize:整型,指明存储数据的大小=bufsize-1
  • *fp:文件指针

写入字符串

int fputs(char *str, FILE *fp);

返回值:成功返回0,失败返回EOF

参数:

  • *str:要写入的字符串
  • *fp:文件指针

eg:每次读取16个字符

FILE *fp = fopen("des_plain.txt","r");
char s[17]; 
while (fgets(s, 17, fp)!=NULL) 
{
    fputs(s, stdout);
    printf("\n");
}
fclose(fp);

写入文件

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

返回值:返回实际写入的数据块数目

参数:

  • *buffer:待写入数据的内存地址
  • size:要写入内容的单字节数
  • count:要进行写入size字节的数据项的个数
  • *fp:文件指针

读取文件

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

返回值:调用成功返回实际读取到的元素个数,失败或读到文件末尾返回0

参数:

  • *buffer:用于接收数据的内存地址
  • size:要读的每个数据项的字节数,单位是字节
  • count:要读取的数据项数目,每个数据项size个字节
  • *fp:文件指针

eg:写入多个字符到文件并读取文件

    FILE *fp;
    char buffer[30] = {'a','b','c','d','e','f'};
    char list[30];
    fp = fopen("file.txt", "w+");
    int numwrite = fwrite(buffer, sizeof(char), 6, fp);
    printf("%d\n", numwrite); // 写入字符数
    puts(buffer);
    rewind(fp); // 返回文件头
    int numread = fread(list, sizeof(char), 30, fp);
    printf("%d\n", numread);
    puts(list);
    fclose(fp);
    return 0;
}

格式化写入文件

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

返回值:成功返回输出的字符数,失败返回一个负值

参数:

  • *fp:文件指针
  • *format:输出格式
  • [argument]:附加参数列表

格式化读取文件

int fscanf(FILE* fp, constchar* format, [argument]);

返回值:成功返回读入参数的个数,失败返回EOF

参数:

  • *fp:文件指针
  • *format:格式化字符串
  • [argument]:输入列表

eg:格式化写入和读取文件

FILE *fp;
fp = fopen("file.txt", "w+");
fprintf(fp, "%s %s %s %d", "I", "am", "Xherlock", 2022);
rewind(fp);
char str1[10], str2[10], str3[10];
int year;
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("The first string is \"%s\"\n", str1);
printf("The second string is \"%s\"\n", str2);
printf("The third string is \"%s\"\n", str3);
printf("The first integer is %d\n", year);
fclose(fp);
return 0;

重新回到文件头

void rewind(FILE *fp);

区分

需要注意整形、浮点型数据的字节长度

fwrite和fread是读写二进制文本

最后修改:2022 年 04 月 15 日
如果觉得我的文章对你有用,请随意赞赏