参考菜鸟教程及课本
文件
fopen函数
c
FILE *fopen(const char *filename, const char *mode)
fscanf函数
就是比scanf函数多了一个指针参数
c
char str1[],str2[],str3[];
int a;
fscanf(fp, "%s %s %s %d", str1, str2, str3, &a);
fprint函数同理。
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
fseek函数
每个流都有相关的文件位置,打开文件时,可能在文件的起始处,但是如果文件按"追加"方式打开,那么流也可能在文件的末尾。但是某些程序需要在文件里有跳跃的能力,于是引进fseek函数。
c
<stdio.h>头文件里定义了三种宏。
宏 | 意义 |
---|---|
SEEK_SET | 文件的起始处 |
SEEK_CUR | 文件的当前位置 |
SEEK_END | 文件的末尾处 |
函数声明:
c
int fseek(FILE *stream, long int offset, int whence)
- stream:指向FILE对象的指针,该FILE对象标识了流。
- offset:相对whence的偏移量,以字节为单位。
- whence:表示开始添加偏移offset的位置。一般指定为上述规定的宏。
返回值: - 成功:0
- 失败:非0值
实例:
c
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt","w+");
fputs("This is runoob.com", fp);
fseek( fp, 7, SEEK_SET );
fputs(" C Programming Langauge", fp);
fclose(fp);
return(0);
}
输出:
c
This is C Programming Langauge
rewind函数
把文件位置设置在起始处
rewind()函数会把文件位置设置在起始处,几乎等价于~
c
fseek(fp,0L,SEEK_SET)
声明:
c
void rewind(FILE *stream)
返回值 :该函数不返回任何值
例子:
c
#include <stdio.h>
int main()
{
char str[] = "This is runoob.com";
FILE *fp;
int ch;
/* 首先让我们在文件中写入一些内容 */
fp = fopen( "file.txt" , "w" );
fwrite(str , 1 , sizeof(str) , fp );
fclose(fp);
fp = fopen( "file.txt" , "r" );
while(1)
{
ch = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("%c", ch);
}
rewind(fp);
printf("\n");
while(1)
{
ch = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("%c", ch);
}
fclose(fp);
return(0);
}
假设我们有一个文本文件 file.txt,它的内容如下:
c
This is runoob.com
让我们编译并运行上面的程序,这将产生以下结果:
c
This is runoob.com
This is runoob.com
feof函数
声明:
c
int feof(FILE *stream)
返回值:
当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。意思就是可以用这个函数来判断在读取文件时,是否出错,如果出错了,就返回0。
注意,feof 仅用于在读写发生错误以后,发生错误以后,发生错误以后,判断是否到是文件结尾导致的。
fread函数
声明:
c
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
参数:
- ptr:这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
- size: 这是要读取的每个元素的大小,以字节为单位。
- nmemb:这是元素的个数,每个元素的大小为 size 字节。
- stream:这是指向 FILE 对象的指针,该 FILE对象指定了一个输入流。
返回值:
成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
实例:
c
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char c[] = "This is runoob";
char buffer[20];
/* 打开文件用于读写 */
fp = fopen("file.txt", "w+");
/* 写入数据到文件 */
fwrite(c, strlen(c) + 1, 1, fp);
/* 查找文件的开头 */
fseek(fp, 0, SEEK_SET);
/* 读取并显示数据 */
fread(buffer, strlen(c)+1, 1, fp);
printf("%s\n", buffer);
fclose(fp);
return(0);
}
fwrite函数
声明:
c
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
- ptr :这是指向要被写入的元素数组的指针。
- size :这是要被写入的每个元素的大小,以字节为单位。
- nmemb :这是元素的个数,每个元素的大小为 size 字节。
- stream : 这是指向 FILE 对象的指针,该 FILE对象指定了一个输出流。
返回值:
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
实例:
c
#include<stdio.h>
int main ()
{
FILE *fp;
char str[] = "This is runoob.com";
fp = fopen( "file.txt" , "w" );
fwrite(str, sizeof(str) , 1, fp );
fclose(fp);
return(0);
}
fgetc函数
c
int fgetc(FILE *stream)
//读取一个无符号字符
fputc函数
c
int fputc(int char, FILE *stream)
fgets函数
c
char *fgets(char *str, int n, FILE *stream)
实例:
c
#include <stdio.h>
int main()
{
FILE *fp;
char str[60];
/* 打开用于读取的文件 */
fp = fopen("file.txt" , "r");
if(fp == NULL) {
perror("打开文件时发生错误");
return(-1);
}
if( fgets (str, 60, fp)!=NULL ) {
/* 向标准输出 stdout 写入内容 */
puts(str);
}
fclose(fp);
return(0);
}
返回值:
如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
如果发生错误,返回一个空指针。
fputs函数
c
int fputs(const char *str, FILE *stream)
返回值:
该函数返回一个非负值,如果发生错误则返回 EOF。
实例:
c
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "w+");
fputs("这是 C 语言。", fp);
fputs("这是一种系统程序设计语言。", fp);
fclose(fp);
return(0);
}