c语言对文件的操作

以下是c语言对文件的基本操作:

1.使用文件的方式有哪些:

文件使用方式含义
"r"       (只读)打开一个文本文件,只允许读数据
"w"      (只写)打开或建立一个文本文件,只允许写数据
"a"       (追加)打开一个文本文件,并在文件末尾写数据
"rb"     (只读)打开一个二进制文件,只允许读数据
"wb"   (只写)打开或建立一个二进制文件,只允许写数据
"ab"    (追加)打开一个二进制文件,并在文件末尾写数据
"r+"     (读写)打开一个文本文件,允许读和写
"w+"   (读写)打开或建立一个文本文件,允许读和写
"a+"    (读写)打开一个文本文件,允许读,或在文件末追加数据
"rb+"   (读写)打开一个二进制文件,只允许读和写
"wb+" (读写)打开或建立一个二进制文件,允许读和写
"ab+"  (读写)打开一个二进制文件,允许读,或在文件末追加数据

2.文件的打开函数fopen:

其调用格式一般如下:
FILE *fp;
fp=fopen(文件名,使用文件方式);

3.文件的关闭函数fclose:

fclose(文件指针);
例如:fclose(fp);

4.文件的读写

4.1  fputc函数

fputc函数的作用是把一个字符写到磁盘文件(fp所指向的文件)中,其调用的一般格式如下:
ch=fputc(ch,fp);
其中,ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量;fp是文件指针变量。当函数输出成功则返回值就是输出的字符;如果输出失败,则返回EOF。

4.2 fgetc函数

fgetc函数的作用是从指定的文件(fp指向的文件)读入一个字符赋给ch(注意,该文件必须是以读或读写的方式打开)。当函数遇到文件结束符时将返回一个文件结束标志EOF。
其调用的一般格式如下:
ch=fgetc(fp);

4.3 fread函数和fwrite函数

fputc和fgetc函数每次只能读写文件中的一个字符,但是在编写程序的过程中往往需要对整块数据进行读写,列如对一个结构体类型变量值进行读写,此时就用到了fread和fwrite函数。
1.fread函数
fread函数的作用是从fp所指向的文件中读入count次,每次读size字节,读入的信息存储在buffer地址中。
fread函数的一般格式如下:
fread(buffer,size,count,fp);
2.fwrite函数
fwrite函数的作用是将buffer地址开始的信息输出count次,每次写size字节到fp所指向的文件。
fwrite函数的一般格式如下:
fwrite(buffer,size,count,fp);
例如:
fread(a,2,3,fp);
其含义是从fp所指向的文件中,每次读2个字节送入数组a中,连续读3次。
fwrite(a,2,3,fp);
其含义是将a数组中的信息每次输出2个字节到fp所指向的文件中,连续输出3次。

5.文件的定位

要实现搜索定位功能,除了fseek函数外,还有两个函数在编写程序的过程中也会经常遇到,即rewind函数和ftell函数。
5.1 rewind函数
rewind函数的作用是使位置指针重新返回文件的开头,该函数没有返回值。
rewind函数的一般格式如下:
int rewind(文件类型指针)
5.2 ftell函数
ftell函数的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。当ftell函数返回值为-1L时,表示出错。
ftell函数的一般格式如下:
long ftell(文件类型指针)
例如:
long i;
if((i=ftell(fp))==-1L)
    printf("error");

5.3 fseek函数
fseek(文件类型指针,位移量,起始点);
    该函数的作用是移动文件内部位置指针。其中,"文件类型指针"指向被移动的文件;"位移量"表示移动的字节数,要求位移量是long型数据,以便在文件长度在大于64k时,常用常量表示位移量时,要求加后缀"L";"起始点"表示从何处开始计算位移量,规定的起始点有3种,即文件首、当前位置和文件末尾。
起始点表示符号字数表示
文件首SEEK-SET0
当前位置SEEK-CUR1
文件末尾SEEK-END2

例如:
fseek(fp,-20L,1);
表示将位置指针从当前位置向后退20个字节。
说明:
fseek函数一般用于二进制文件;在文本文件中由于要进行转换,故往往计算的位置会出现错误。对文件进行随机读写时,在移动位置指针后,即可以用前面介绍的任一读写函数进行读写。


实例:合并两个文件的内容
/*合并两个文件的内容*/
#include<stdio.h>
#include<stdlib.h>

int main()
{
	char ch,filename1[50],filename2[20];   /**/
    FILE *fp1,*fp2;                            /*定义两个指向FILE类型结构体的指针*/
    printf("please input filename1:\n");
	scanf("%s",filename1);                      /*输入文件所在的路径名称*/
	if((fp1=fopen(filename1,"a+"))==NULL)        /*在文件末尾追加的方式打开*/
	{
		printf("无法打开此文件!\n");
		exit(0);
	}
	printf("file:\n");
	ch=fgetc(fp1);
	while(ch!=EOF)                             /*将文件1中的内容输出*/
	{
		putchar(ch);                           /*putchar()一次输出一个字符*/
		                                       /*fgetc()一次读取一个字符*/
		ch=fgetc(fp1);
	}
	printf("\n请输入文件2的名字:\n");
	scanf("%s",filename2);
	if((fp2=fopen(filename2,"r"))==NULL)        /*以只读的方式打开*/
	{
		printf("无法打开此文件!\n");
		exit(0);
	}
	printf("file2:\n");
    ch=fgetc(fp2);
	while(ch!=EOF)                             /*将文件2中的内容输出*/
	{
		putchar(ch);                           /*putchar()一次输出一个字符*/
		                                       /*fgetc()一次读取一个字符*/
		ch=fgetc(fp2);
	}
    fseek(fp2,0L,0);                       /*将文件2中的位置指针移到文件开始处*/
	ch=fgetc(fp2);
	while(!feof(fp2))
	{
		fputc(ch,fp1);                     /*将文件2中的内容输出到文件1中*/
		ch=fgetc(fp2);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}
合并前文档的内容

     


最后补充一点有时候为什么把东西写进文件后变成了乱码????????????

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值