c语言 文件f指针,C语言文件操作

一. 文件指针

1. 在C语言中,规定文件的结构体为FILE,FILE实际上是_iobuf的别名。

struct _iobuf {

char *_ptr;

int _cnt;

char *_base;

int _flag;

int _file;

int _charbuf;

int _bufsiz;

char *_tmpfname;

};

typedef struct _iobuf FILE;

2. 定义一个指向文件的指针。

FILE *fp; //fp指向一个文件

二. 打开文件和关闭文件。

1. fopen();打开文件

函数原型: FILE * fopen(char * Filename,char *Mode);

返回类型是一个FILE*指针

Filename 是需要打开的文件路径

Mode 是打开文件的方式 如下:

标识符

作用

r

只读

w

只写

a

追加

r+

读和写

w+

读和写

a+

读和写

rb

只读(二进制)

wb

只写(二进制)

ab

追加(二进制)

rb+

读和写(二进制)

wb+

读和写(二进制)

ab+

读和写(二进制)

打开文件时一般需要判断是否打开成功。

#include

int main()

{

FILE* fp;

if ((fp = fopen("test.txt", "a+")) == NULL)

{

printf("打开文件失败!\n");

}

return 0;

}

打开文件失败的原因一般有以下4个:

a). 使用只读(r)的方式打开空的文件。

b). 指定的盘符不存在或者指定的路径不存在。

c). 文件名包含一些稀奇古怪的符号 比如123@.txt

d). 有些文件被其他程序占用。

2.fclose();关闭文件

函数原型:int fclose(FILE *File);

fclose(fp);

文件打开使用完成之后,必须要关闭,防止数据丢失。

三. 文件内部指针。

当我们打开一个文件之后,在文件内部有一个位置指针,用来指向文件当前的读写位置。该指针在文件打开时总是指向第一个字节的。随着我们对文件进行读写的过程,这个内部位置指针会发生变化。

1. fseek(); 文件内部指针偏移

函数原型:int fseek(FILE * File, long Offset, int Origin);

File 即为文件指针。通常为fp。

Offset指的是偏移量,正数向右偏移,负数向做偏移,偏移量为常数,后面通常加上L。

Origin 是文件偏移的起始点。0表示文件头 1表示当前位置 2表示文件尾

fseek(fp, 16L, 0); //从文件头向右偏移16个字节

fseek(fp, -16L, 1); //从当前位置向左偏移16个字节

fseek(fp, 16L, 2); //从文件尾向左偏移16个字节

2. rewind(); 重置文件内部指针为文件头。

函数原型:void rewind(FILE *File);

rewind(fp); //重置文件内部指针为文件头

四. 文件的读写。

1. fputc(); 和fgetc();

函数原型:

int fputc(int Ch,FILE *File); //把字符Ch写入文件File

int fgetc(FILE * File); //从文件当前位置读字符

案例:

#include

int main()

{

FILE* fp; //定义一个文件指针

if ((fp = fopen("test.txt", "w+")) == NULL) //打开test.txt

{

printf("打开文件失败!\n");

}

char ch = 'j'; //定义一个字符变量ch,初始化为'j'

char ch1;

fputc(ch, fp); //将ch写入文件 注意:这里的文件内部指针会变化。

rewind(fp); //将变化后的文件内部指针重置为文件头

ch1 = fgetc(fp); //从文件中读出一个字符 存放到ch1中

printf("%c\n", ch1);

fclose(fp); //关闭文件

return 0;

}

2. fputs(); 和fgets();

函数原型:

int fputs(const char* Str, FILE* File); //把字符串Str写入文件File

char* fgets(char* Buf, int MaxCount, FILE* File); //从文件File中获取MaxCount个字符存放到Buf指向的字符串中,结尾补'\0'。

案例:

#include

int main()

{

FILE* fp; //定义一个文件指针

if ((fp = fopen("test.txt", "w+")) == NULL) //打开test.txt

{

printf("打开文件失败!\n");

}

char str[30] = "+qq:380672980"; //定义一个字符串str,初始化为"+qq:380672980"

char str1[30];

fputs(str, fp); //将str写入文件 注意:这里的文件内部指针会变化。

rewind(fp); //将变化后的文件内部指针重置为文件头

fgets(str1,30,fp); //从文件中获取30个字符存放到str1中,结尾补'\0'。

printf("%s\n", str1);

fclose(fp); //关闭文件

return 0;

}

3. fprintf(); 和fscanf();

函数原型:

int fprintf(FILE * File, const char * Format, ...);

int fscanf(FILE * File, const char * _Format, ...);

案例:

#include

int main()

{

FILE *fp;

char str[20] = "C++";

char str1[20] = "Python";

char buf[20];

char buf1[20];

char buf2[20];

if ((fp = fopen("test.txt", "w+")) == NULL)

{

printf("打开文件失败!");

return 0;

}

fprintf(fp, "%s Vs %s", str, str1); //把str和str按照"%s Vs %s"的格式写入fp

rewind(fp); //重置位置

fscanf(fp, "%s %s %s", buf, buf1, buf2); //读取字符串

printf("%s\n%s\n%s\n", buf, buf1, buf2); //打印

fclose(fp);

return 0;

}

4. fread(); 和fwrite();

函数原型:

//从字符串往文件写 Size大小,写Count次。

size_t fwrite(const void * Str, size_t Size,size_t Count, FILE * File);

//从文件中每次读取ElementSize个字符,一共读取Count次。

size_t fread(const void * DstBuf, size_t ElementSize,size_t Count, FILE * File);

案例:

#include

int main()

{

FILE *fp;

char str[100] = "Is everyone here taday";

char str1[100];

if ((fp = fopen("test.txt", "w+")) == NULL)

{

printf("打开文件失败!");

return 0;

}

fwrite(str, 3, 8, fp);

rewind(fp);

fread(str1, 1, 23, fp);

printf("%s\n", str1);

fclose(fp);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值