C++中fstream的使用

news/2024/5/20 14:45:27

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):


以下是测试代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>#include "fstream.hpp"/* reference: http://www.tutorialspoint.com/cplusplus/cpp_files_streams.htmhttps://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.htmlhttp://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 Filestd::ofstream fout(filename.c_str());  // default mode is ios::out | ios::truncif (!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 filestd::ifstream fin(filename.c_str());  // default mode ios::inif (!fin) {std::cerr << "error: open file for input failed!" << std::endl;abort();}char ch;while (fin.get(ch)) {  // till end-of-filestd::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 Filestd::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 filestd::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;
}


GitHub:https://github.com/fengbingchun/Messy_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/29333.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

按esc键退出的一个函数

1functionesckey(keycode) // 按esc键退出2{ 3if (keycode 27 ) 4{ 5window.close() 6} 7}

判断输入是否为中文的函数

1functionischinese(s){ 2varrettrue ; 3for ( vari0 ;i < s.length;i) 4 retret &&(s.charCodeAt(i) > 10000 ); 5returnret; 6 }

内存检测工具Dr. Memory的使用

Dr. Memory是一个内存调试工具&#xff0c;它是一个开源免费的内存检测工具&#xff0c;它能够及时发现内存相关的编程错误&#xff0c;比如未初始化访问、内存非法访问、数组越界读/写、以及内存泄露等。它可以在Linux、Windows、Mac OS和Android操作系统上使用。关于Dr. Memo…

MyBatis中#{}和${}的区别

------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1、在 MyBatis 的映射配置文件中&#xff0c;动态传递参数有两种方式&#xff1a; &#xff08;1&#xff09;#{} 占位符 &#xff08;2&#xff09;${} 拼接符 2、#{} 和 ${} 的区别 &#xff08;1&#xff…

列表框操作函数集合

1 /*列表框互相操作函数集 */23// 描述: 添加不重复列表框元素4functionselAdd( srcList, dstList )5 {6varselectedIndex newArray();7varcount 0 ;89for( i0 ; i < srcList.options.length; i ){1011if( srcList.options[i].selected ){1213selectedIndex[count] i;14…

ipython --pandas

d定义: pandas是一个强大的Python数据分析的工具包。 pandas是基于NumPy构建的。 安装方法: pip install pandas import pandas as pd pandas的主要功能 具备对其功能的数据结构DataFrame、Series 集成时间序列功能 提供丰富的数学运算和操作 灵活处理缺失数据 Series 定义:Ser…

linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作

批处理是一种非交互式运行MySQL程序的方法&#xff0c;如同您在MySQL中使用的命令一样&#xff0c;你仍然将使用这些命令。为了实现批处理&#xff0c;您重定向一个文件到MySQL程序中&#xff0c;首先我们需要一个文本文件&#xff0c;这个文本文件包含有与我们在MySQL中输入的…

SpringMVC学习手册(三)------EL和JSTL(上)

1.含义 EL: Expression Language , 表达式语言JSTL: Java Server Pages Standard Tag Library, JSP标准标签库 2.测试项目构建 2.1 复制JSTL的标准实现 复制Tomcat中webapps\examples\WEB-INF\lib下的两个jar包到新建项目目录的WEB-INF\lib下2.2 在JSP文件中使用tagli…