C++ 读取文件和写入文件

C++读取文件

有两种方式可以实现读文件的功能
第一种:
用fread实现,这种方法适合读取各种结构化的数据包

#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <string.h>
int main(){
    
    
	FILE *file_pointer = fopen("/home/data/abc.dat", "rb");
	//假设数据包abc.dat中存储的是DiyInfo类型的结构体
	DiyInfo diy_info;
	while (!feof(file_pointer)) {
    
    
   		//从数据文件中读取数据,放入diy_info中进行反序列化
   		fread(&diy_info, sizeof(char), sizeof(DiyInfo), file_pointer);
   		//打印读出来的结果
   		printf(diy_info.xxxxx);
	}
	fclose(file_pointer);
	return 0;
}

第二种:
用fstream实现,这种方式适合读取一行一行的文本文件

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
using namespace std;
//解析一行文本的函数,可以将一行字符串按照空格打断,把里面的词取出来装进vector向量
vector<string> parseLine(string line) {
    
    
    vector<string> v;
    int pos = 0;
    int pos2 = 0;
    int len = line.length();
    while (pos < len) {
    
    
        pos2 = line.find(" ", pos);
        if (pos2 == -1)
            pos2 = len;
        v.push_back(line.substr(pos, pos2 - pos));
        pos = pos2 + 1;
    }
    return v;
}

int main(){
    
    
	ifstream input_file("/home/data/abc.txt");
	string line;
	//用getline()函数取出文件中的一行,存入字符串变量line中
	while (getline(input_file, line)) {
    
    
		//line是一大串字符串,如果需要把里面的词拿出来,就调用上面的parseLine函数
       vector<string> line_content = parseLine(line);
       //依次打印解出来的行中的单词
       for (int i = 0; i < line_content.size(); ++i) {
    
    
       		cout << line_content[i] << " ";
       }
       cout << endl;
    }
	input_file.close();
	return 0;
}

C++写文件

同样,有两种方式可以实现
第一种:
用fwrite实现,这种方法适合写入结构化的数据包

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
int main(){
    
    
	FILE* file_pointer = fopen("./testfile.dat", "w");
	//假设要在数据包中写入DiyInfo类型的结构体
	DiyInfo diy_info;
	//向文件中写入1000帧
	for (int i = 0; i < 1000; ++i){
    
    
   		diy_info.xxxxx = 777;
   		fwrite(&diy_info, 1, sizeof(DiyInfo), file_pointer);
	}
	fclose(file_pointer);
	return 0;
}

第二种:
用fstream实现,这种方式适合一行一行写入文本文件,很简单,和cout几乎一模一样

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
using namespace std;
int main(){
    
    
	std::ofstream output_file("./testfile.dat");
	DiyInfo diy_info;
	for (int i = 0; i < 1000; ++i){
    
    
		diy_info.xxxxx = i;
        output_file << "diy_info.xxxxx " << diy_info.xxxxx << endl;
        cout << "diy_info.xxxxx " << diy_info.xxxxx << endl;
	}
	outfile.close();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/TU_Dresden/article/details/126417498