文件的定义,文件操作函数,操作步骤以及注意事项等


1.文件是什么,文件的唯一标识:三要素(路径,文件名,后缀)
    文件:储存在外部介质上的数据集合
2.文件操作函数
    2.1 fopen      返回值:文件指针FILE*    两个参数(第一个参数[文件名] 第二个参数[以什么方式打开文件] )
    2.2 fclose     参数只有一个(释放的文件流指针)   1.防止内存泄露  2.未释放再次打开可能发生错误
    2.3 fread     返回值:返回实际读取的项目数   四个参数(1.从文件中读取的数据存放在内存的哪个区域, 2.读取的项目的大小, 3.读取的最大项目数,4.从哪个文件里读取)
                  fread返回值如果小于输入缓存区大小  则一定读取完毕   否则不能保证一定读完
    2.4 fwrite    返回值:返回实际写入的项数   四个参数(1.准备写入到文件里的数据, 2.写入的项目的大小 3.写入的项目的个数 4.被写入的文件在哪)
    2.5 fseek     调整文件中光标的位置        SEEK_SET  SEEK_CUR  SEEK_END
    2.6 ftell     告诉我光标在文件中的位置   返回值是一个整形值    代表着光标距离文件开始位置多少字节
3.数据流(输入流和输出流)  标准输入流设备:键盘    标准输出流设备:屏幕
    3.1 文本数据流(文本文件 .TXT)           
    3.2 二进制数据流(二进制文件 歌曲 视频 图片 可执行文件)
    3.3 输入流(从文件向内存中写)  输出流(从内存向文件中写)

4.文件操作步骤:  1.打开文件  2.执行文件操作函数  3.关闭文件
5.文件指针
6.文件的绝对路径和相对路径

7.分别对于二进制文件和文本文件进行读写
8.注意事项:fopen函数 如果模式为"w"  则如果里面有数据 会清空再打开  导致数据丢失

int main()
{
	const char* path = "1.txt";//相对路径
	const char* path2 = "C:\\1.txt";//绝对路径
	FILE* fw = fopen(path,"w");
	//int a = 123456;
	const char* str = "123456";
	//fwrite(&a, sizeof(int), 1,fw);
	fwrite(str, sizeof(char), strlen(str), fw);
	fclose(fw);
	return 0;
}

 

//从内存向文本文件写数据(输出流)
int main()
{
	const char* path = "xyz.txt";//相对路径
	FILE* fw= fopen(path, "w");//通过写的方式打开
	const char* str = "hello world";
	fwrite(str, sizeof(char), strlen(str), fw);
	fclose(fw);
	return 0;
}
//从文本文件中读数据写到内存中(输入流)
int main()
{
	const char* path = "xyz.txt";//相对路径
	FILE* fr = fopen(path, "r");//只读权限打开
	//需要申请一块内存用于存储 从文件中分部读取的数据
	char buff[100];
	int len=fread(buff, sizeof(char),100 , fr);
	//一个一个字符来读取的循环方法
	char cr;
	while (fread(buff, sizeof(char), 1, fr) > 0)//读取成功:1;读取失败:0
	{
		printf("%c",cr);
	}
	printf("\n");
	fclose(fr);
	return 0;
}
//从内存向二进制文件写数据(输出流)
int main()
{
	FILE* fwb = fopen("abc.txt", "wb");//通过写的方式打开
	int arr[] = { 12,23,34,45,56,67,78,89,90,100 };
	fwrite(arr,sizeof(arr), sizeof(arr)/sizeof(arr[0]),fwb);
	fclose(fwb);
	return 0;
}
//从二进制文件中读数据 写到内存中(输入流)
int main()
{
	FILE* frb = fopen("abc.txt", "rb");//只读权限打开
	//需要申请一块内存用于存储 从文件中分部读取的数据
	int tmp;//类似上面的buff
	while (fread(&tmp, sizeof(int), 1, frb) > 0)//读取成功:1;读取失败:0
	{
		printf("%d", tmp);
	}
	printf("\n");
	fclose(frb);
	return 0;
}
//fseek
int main()
{
	const char* str = "www.txt";
		FILE*fw=fopen(str, "w");
		const char* str1 = "hello world";
		const char* str2 = "wwww,yyyyy";
		fwrite(str1, sizeof(char), strlen(str1), fw);
		fseek(fw,0,SEEK_SET);//调整参数的位置
		fseek(fw, -5, SEEK_END);//调整参数的位置,向左走5步,SEEK_END表示从结束位置开始
		fseek(fw, 8, SEEK_SET);//调整参数的位置,从开始位置向右走8步,SEEK_SET表示开始位置
		fwrite(str2, sizeof(char), strlen(str2), fw);
		long flg = ftell(fw);//ftell:获取文件指针的当前位置
		printf("%d\n", flg);
		fseek(fw, -10, SEEK_CUR); //SEEK_CUR表示当前位置
		flg = ftell(fw);
		printf("%d\n", flg);
		fclose(fw);
	return 0;
}

上一篇:python用request下载大文件,遇到MemoryError 解决方法


下一篇:RT-Thread(二)制作自己的BSP