fopen本质上只能读取二进制和char

fread原型函数

fread的原型函数为
size_t fread ( void *buffer, size_t size, size_t count, FILE stream)
ptr – 这是指向带有最小尺寸 size
nmemb 字节的内存块的指针。
size – 这是要读取的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流
返回值 – 成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

fopen原型函数

fopen的原型函数为
FILE *fopen(const char *filename, const char *mode);
filename-- 这是 C 字符串,包含了要打开的文件名称。
mode-- 这是 C 字符串,包含了文件访问模式。
fopen本质上只能读取二进制和char_第1张图片
fopen在读取文件时,本质上,它只认识char和二进制,也就是说所有含b的是以二进制读取或写入,其他的全都是能且只能当做char读取,然后再将char转换为想要的类型。
比如 txt文件中写入的是
在这里插入图片描述

getline函数

为了读取,可以使用getline读取一行,如下程序
 ifstream readFile("config.txt");
	char buff[] = "";
	int cnt = 0;
	while (readFile.getline(buff, 1024))
	{
//		cout << buff << endl;
		cnt ++;
		if (cnt == 1)
			Raw_sample_rate = atoi(buff);
		else if (cnt == 2)
			db = atoi(buff);
	}
	这里是为了简单,所以一行写一个数字。注意atoi和itoa的使用很方便。

fopen函数

	也可以使用fopen
	FILE*config_fp = fopen("config.txt");
	char* aRaw_sample_rate = NULL;
	aRaw_sample_rate = ( char * )malloc( 5*sizeof(char) + 1 );//分配空间
	memset ( aRaw_sample_rate, 0, 5*sizeof(char) + 1 ); //初始化
	fread( aRaw_sample_rate, 5, 1, config_fp );
	Raw_sample_rate = atoi( aRaw_sample_rate );
	free( aRaw_sample_rate );
	fclose( config_fp );
	注意fopen和fclose要配合使用。

其他情况

以下情况需要单独考虑,后续再详细讨论。

txt里面一行包含double类型或汉字

txt里面一行包含多个参数,用不同的分隔符分隔

txt如果是通过fwrite写入的double或int或char,在读取时和自己创建的txt外部文件有没有不同?

你可能感兴趣的:(C++)