C++中fstream_在使用中

C++中fstream_在使用中C++中fstream的使用

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

C++中处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。如果只执行输入,使用ifstream类;如果只执行输出,使用 ofstream类;如果要对流执行输入和输出,使用fstream类。可以将文件名称用作构造函数参数。

ofstream: Stream class to write on files.

ifstream: Stream class to read from files.

fstream: Stream class to both read and write from/to files.

These classes are derived directly or indirectly from the classes istream and ostream.

对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。被打开的文件在程序中由一个流对象(stream object)来表示 (这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。

要通过一个流对象打开一个文件,可以使用它的成员函数open()或直接通过构造函数。

void open (constchar * filename, openmode mode);

这里filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合:

ios::in  以输入(读)方式打开文件;

ios::out  以输出(写)方式打开文件;

ios::ate  初始位置:文件尾,文件打开后定位到文件尾;

ios::app  以追加的方式打开文件,所有输出附加在文件末尾;

ios::trunc  如果文件已存在则先删除该文件;

ios::binary  二进制方式,以二进制方式打开文件;

这些标识符可以被组合使用,中间以”或”操作符(|)间隔。

这些类的成员函数open 都包含了一个默认打开文件的方式,只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。ofstream类的默认打开方式是: ios::out | ios::trunc ;ifstream 类的默认打开方式是ios::in;fstream类的默认打开方式是: ios::in | ios::out.

        http://www.cplusplus.com/reference/fstream/fstream/中列出了fstream中可以使用的成员函数。

         C++ IO heads, templates and class (https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html):

C++中fstream_在使用中

以下是测试代码:

#include <iostream>#include <fstream>#include <string>#include <cstdlib>#include <vector>#include "fstream.hpp"/* reference: 	http://www.tutorialspoint.com/cplusplus/cpp_files_streams.htm	https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html	http://www.bogotobogo.com/cplusplus/fstream_input_output.php*/int test_file_size(){	std::ifstream in("E:/GitCode/Messy_Test/testdata/fstream_data.bin", std::ios::binary);	if (!in.is_open()) {		std::cout << "fail to open file\n";		return -1;	}	std::streampos begin, end;	begin = in.tellg();	in.seekg(0, std::ios::end);	end = in.tellg();	in.close();	std::cout << "this file's size is: " << (end - begin) << " bytes.\n";	return 0;}int test_fstream1(){	char data[100];	// open a file in write mode.	std::ofstream outfile;	outfile.open("E:/GitCode/Messy_Test/testdata/fstream.dat");	if (!outfile.is_open()) {		std::cout << "fail to open file to write\n";		return -1;	}	std::cout << "Writing to the file" << std::endl;	std::cout << "Enter your name: ";	std::cin.getline(data, 100);	// write inputted data into the file.	outfile << data << std::endl;	std::cout << "Enter your age: ";	std::cin >> data;	std::cin.ignore();	// again write inputted data into the file.	outfile << data << std::endl;	// close the opened file.	outfile.close();	// open a file in read mode.	std::ifstream infile;	infile.open("E:/GitCode/Messy_Test/testdata/fstream.dat");	if (!infile.is_open()) {		std::cout << "fail to open file to read\n";		return -1;	}	std::cout << "Reading from the file" << std::endl;	infile >> data;	// write the data at the screen.	std::cout << data << std::endl;	// again read the data from the file and display it.	infile >> data;	std::cout << data << std::endl;	// close the opened file.	infile.close();	return 0;}int test_fstream2(){	/* Testing Simple File IO (TestSimpleFileIO.cpp) */	std::string filename = "E:/GitCode/Messy_Test/testdata/test.txt";	// Write to File	std::ofstream fout(filename.c_str());  // default mode is ios::out | ios::trunc	if (!fout) {		std::cerr << "error: open file for output failed!" << std::endl;		abort();  // in <cstdlib> header	}	fout << "apple" << std::endl;	fout << "orange" << std::endl;	fout << "banana" << std::endl;	fout.close();	// Read from file	std::ifstream fin(filename.c_str());  // default mode ios::in	if (!fin) {		std::cerr << "error: open file for input failed!" << std::endl;		abort();	}	char ch;	while (fin.get(ch)) {  // till end-of-file		std::cout << ch;	}	fin.close();	return 0;}int test_fstream3(){	/* Testing Binary File IO (TestBinaryFileIO.cpp) */	std::string filename = "E:/GitCode/Messy_Test/testdata/test.bin";	// Write to File	std::ofstream fout(filename.c_str(), std::ios::out | std::ios::binary);	if (!fout.is_open()) {		std::cerr << "error: open file for output failed!" << std::endl;		abort();	}	int i = 1234;	double d = 12.34;	fout.write((char *)&i, sizeof(int));	fout.write((char *)&d, sizeof(double));	fout.close();	// Read from file	std::ifstream fin(filename.c_str(), std::ios::in | std::ios::binary);	if (!fin.is_open()) {		std::cerr << "error: open file for input failed!" << std::endl;		abort();	}	int i_in;	double d_in;	fin.read((char *)&i_in, sizeof(int));	std::cout << i_in << std::endl;	fin.read((char *)&d_in, sizeof(double));	std::cout << d_in << std::endl;	fin.close();	return 0;}int test_fstream4(){	std::string theNames = "Edsger Dijkstra: Made advances in algorithms, the semaphore (programming).\n";	theNames.append("Donald Knuth: Wrote The Art of Computer Programming and created TeX.\n");	theNames.append("Leslie Lamport: Formulated algorithms in distributed systems (e.g. the bakery algorithm).\n");	theNames.append("Stephen Cook: Formalized the notion of NP-completeness.\n");	std::ofstream ofs("E:/GitCode/Messy_Test/testdata/theNames.txt");	if (!ofs)	{		std::cout << "Error opening file for output" << std::endl;		return -1;	}	ofs << theNames << std::endl;	ofs.close();	char letter;	int i;	std::string line;	std::ifstream reader("E:/GitCode/Messy_Test/testdata/theNames.txt");	if (!reader) {		std::cout << "Error opening input file" << std::endl;		return -1;	}	//for (i = 0; !reader.eof(); i++) {	while (!reader.eof()) {		reader.get(letter);		std::cout << letter;		//getline( reader , line ) ;		//std::cout << line << std::endl;	}	reader.close();	return 0;}//std::ofstream _file;int test_init_database(){	_file.open("E:/GitCode/Messy_Test/testdata/data.bin");	if (!_file.is_open()) {		fprintf(stderr, "open file fail\n");		return -1;	}	return 0;}int test_store_database(){	for (int i = 0; i < 10; ++i) {		_file.write((char*)&i, sizeof(i));	}	return 0;}int test_close_database(){	_file.close();	return 0;}int test_fstream5(){	test_init_database();	for (int i = 0; i < 5; ++i) {		test_store_database();	}	test_close_database();	std::ifstream file("E:/GitCode/Messy_Test/testdata/data.bin");	if (!file.is_open()) {		fprintf(stderr, "open file fail\n");		return -1;	}	int a[100];	for (int i = 0; i < 50; ++i) {		file.read((char*)&a[i], sizeof(int));	}	file.close();	return 0;}//static void parse_string(char* line, std::string& image_name, std::vector<int>& rect){	std::string str(line);	rect.resize(0);	int pos = str.find_first_of(" ");	image_name = str.substr(0, pos);	std::string str1 = str.substr(pos + 1, str.length());	for (int i = 0; i < 4; ++i) {		pos = str1.find_first_of(" ");		std::string x = str1.substr(0, pos);		str1 = str1.erase(0, pos+1);		rect.push_back(std::stoi(x));	}}int test_fstream6(){	std::string name{ "E:/GitCode/Messy_Test/testdata/list.txt" };	std::ifstream in(name.c_str(), std::ios::in);	if (!in.is_open()) {		fprintf(stderr, "open file fail: %s\n", name.c_str());		return -1;	}	int count{ 0 };	char line[256];	in.getline(line, 256);	count = atoi(line);	std::cout << count << std::endl;	//while (!in.eof()) {	for (int i = 0; i < count; ++i) {		in.getline(line, 256);		std::cout << "line: "<< line << std::endl;		std::string image_name{};		std::vector<int> rect{};		parse_string(line, image_name, rect);		std::cout << "image name: " << image_name << std::endl;		for (auto x : rect)			std::cout << "  " << x << "  ";		std::cout << std::endl;	}	in.close();	return 0;}//int test_fstream7(){	std::string name{ "E:/GitCode/Messy_Test/testdata/list.txt" };	std::ifstream in(name.c_str(), std::ios::in);	if (!in.is_open()) {		fprintf(stderr, "open file fail: %s\n", name.c_str());		return -1;	}	int count{ 0 };	std::string image_name{};	int left{ 0 }, top{ 0 }, right{ 0 }, bottom{ 0 };	in >> count;	std::cout << "count: " << count << std::endl;	for (int i = 0; i < count; ++i) {		in >> image_name >> left >> top >> right >> bottom;		fprintf(stdout, "image_name: %s, rect: %d, %d, %d, %d\n", image_name.c_str(), left, top, right, bottom);	}	in.close();	return 0;}

GitHubhttps://github.com/fengbingchun/Messy_Test

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191963.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 推荐10款最好的免费项目管理工具[通俗易懂]

    推荐10款最好的免费项目管理工具1.TeamLab  TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括:项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。 2.XPlanner+XPlanner是专门为XP(极限编程)团队设计的项目管理工具3.DevCloud    DevCloud…

  • nextSibling 和nextElementSibling的区别[通俗易懂]

    nextSibling 和nextElementSibling的区别[通俗易懂]使用nextSibling属性返回指定节点之后的下一个兄弟节点,(即:相同节点树层中的下一个节点)。nextSibling属性与nextElementSibling属性的差别: nextSibling属性返回元素节点之后的兄弟节点(包括文本节点、注释节点即回车、换行、空格、文本等等); nextElementSibling属性只返回元素节点之后的兄弟元素节点(不包括文本节点、注释节点);注意:空…

  • C语言中void具体有什么作用

    C语言中void具体有什么作用1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因

  • winscp连接centos7出现拒绝连接

    winscp连接centos7出现拒绝连接1.编辑/etc/ssh/sshd_config文件:sudovi/etc/ssh/sshd_config将PermitRootLogin的值改成yes将PermitEmptyPassword的值改成no保存退出2.重启ssh:查看状态:systemctlstatussshd.service启动服务:systemctlstar…

  • CefSharp 与 js 相互调用「建议收藏」

    CefSharp 与 js 相互调用「建议收藏」CefSharp与js相互调用一.CefSharp调用jsCefSharp.WinForms.ChromiumWebBrowserwb;…方式1.ExecuteScriptAsync方法使用方式与js的eval方法一样,异步执行,无返回值。//xxx为js的方法名称wb.ExecuteScriptAsync(“xx

  • 广州有哪些好点的软件外包公司或者软件开发公司呀?听说广州碧软还不错,还有其他靠谱的软件外包公司?

    广州有哪些好点的软件外包公司或者软件开发公司呀?听说广州碧软还不错,还有其他靠谱的软件外包公司?广州有哪些好点的软件外包公司或者软件开发公司呀?听说广州碧软还不错,还有其他靠谱的软件外包公司?广州碧软,做软件开发与外包还不错,我们和他们一直合作了好几年,不比那些超大型软件外包公司差,因为超大的软件外包公司公司他们也仅仅是一个分公司小部门来给你做项目,店大欺客啊,碧软他们规模中等,但用心,把该交付的东西做好很重要。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号