C语言文件操作


一、什么是文件?

计算机磁盘上的文件就是文件,文件一般分为两种,程序文件和数据文件,当然文件可以不包含后缀名,创建时后缀名可以是任意的

程序文件:包括源文件(后缀为.c)目标文件(windows环境下为obj文件),可执行程序                                 (windows环境下后缀为.exe)。

数据文件:故名思意就是就是对程序的数据进行保存的文件,例如每一次打开vs需要重新输入数据,所以需要对数据进行保存。

二、文件的基本操作

1.文件的打开和关闭

1.打开文件:需要注意的是该文件的返回值是需要一个指针来接收的,在VS环境下成功将会返回一个FILE类型的指针,还需注意第二个参数需要用双引号。

2.关闭文件:文件的如果成功关闭返回0,失败返回EOF。

代码如下(示例):

int main()
{
	FILE*pf=fopen("myfile.txt", "w");
	//打开文件(这里是相对路径)
	//如果是写的话,没有该文件会自动创建一个
	//如果是读文件,没有该文件会返回一个空指针
	assert(pf);
	

	//关闭文件
	fclose(pf);
    pf=NULL;
	return 0;
}


2.0文件的读写


a.字符输出:

int main()
{
	FILE*pf=fopen("myfile.txt", "w");
	assert(pf);
	//int fputc ( int character, FILE * stream );
	// 一次只能输出一个字符
	//参数一,输入你要输入字符的ASCII值,参数二,对应指针
	int i = 0;
	for (i = 0; i < 26; i++)
	{
		fputc('a' + i, pf);
	}
	fclose(pf);
    pf=NULL;
	return 0;
}

文本中看见的结果:abcdefghijklmnopqrstuvwxyz


b:字符输入:

int main()
{
	//文本中上一次存入的是abcdef
	FILE* pf = fopen("myfile.txt","r");//读取文件注意r
	//int fgetc ( FILE * stream );
	//返回值是该字符的ASCII值
	printf("%c\n",fgetc(pf));

	fclose(pf);
    pf=NULL;
	return 0;
}

返回值:

c:文本行输出:

文本在还没有关闭的时候,每一次进行文本行输入如果字符串中没有换行操作,打开将会在上一次的结束位置,如果有换行操作打开将在下一行进行输入。

int main()
{
	FILE* pf = fopen("myfile.txt","w");
	//文本行输出
	//int fputs ( const char * str, FILE * stream );
	//该函数失败会返回EOF
	fputs("abcdef\n",pf);//\n表示在文本中换行的意思
	fputs("hello world!",pf);

	fclose(pf);
    pf=NULL:
	return 0;
}

输出的文本中的结果是:

d:文本行输入

读取时,只会读取n-1个字符保存在str中,第num个字符文本中无论是不是\0,num个字符还是会成为\0,如果num大于这行的字符个数,还是不会读取下一行的字符

int main()
{
	//上一次保存的是abcdef
	FILE* pf = fopen("myfile.txt","r");
	//char * fgets ( char * str, int num, FILE * stream );
	//将pf指针,num-1个字符读入str字符串中
	//如果读取失败返回NULL,读取成功返回首字符地址
	char str[] = "#########";
	char* ptr = fgets(str,3,pf);
	printf("%s\n", ptr);
	fclose(pf);
    pf=NULL:
	return 0;
}

e:二进制输出:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

可以理解为:读取ptr中count个大小为size的数据到stream中去

int main()
{
	FILE*pf=fopen("myfile.txt","wb");
	//size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
	//将ptr数组中的数据输出count个size大小的数据到stream中
	int tmp = 20000;
	fwrite(&tmp,sizeof(int),1,pf);
	fclose(pf);
	return 0;
}

f:二进制输入:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )

理解为:将stream中的数据读取count个大小为size的数据到ptr中去

             下图为文本中存有20000的数据,通过二进制的读取

需要注意的是,对于任意一个C程序就默认打开三个流

stdin---标注输入流----键盘

stdout--标准输出流---屏幕

stderr---标准错误流----键盘

2.1文件的随机的读写:

1.偏移到指定位置

int fseek ( FILE * stream, long int offset, int origin );

offset:偏移量,单位:字节

origin:有三中选择位置:SEEK_SET(文件的初始位置),SEEK_SUR(当前文件指针的位置),SEEK_END(文件的末尾)

2.返回文件指针相对于起始位置的偏移量:

long int ftell ( FILE * stream );

3.让文件返回到初始位置

void rewind ( FILE * stream );

3.文件结束的判断:

1.feof是很多人会判断错误的,这不是判断文件读取结束的标志,feof是判断当文本读取停止时,是因为读取发生意外停止,还是因为遇见文本尾结束

fgetc()函数的结束标志:判断返回值是不是EOF;

fgets()函数的结束标志:判断返回值是否是NULL;

fread()函数的结束标志:读取到的个数小于count个;

4.scanf/fscanf/sscanf和printf/fprintf/sprintf函数比较

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值