一文说完c++全部基础知识,IO流(二)

一、IO流

流、一连串连续不断的数据集合。



看下图,继承关系

using namespace









流类的构造函数

eg:ifstream::ifstream (const char* szFileName, int mode = ios::in, int);

c 复制代码
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream inFile("c:\\tmp\\test.txt", ios::in);
    if (inFile)
        inFile.close();
    else
        cout << "test.txt doesn't exist" << endl;
  
    ofstream oFile("test1.txt", ios::out);
    if (!oFile)
        cout << "error 1";
    else
        oFile.close();

    fstream fFile("tmp\\test2.txt", ios::out | ios::in);
    if (!fFile2)
        cout << "error 2";
    else
        fFile.close();
        
    return 0;
}
c 复制代码
#include <iostream>
#include <fstream>
using namespace std;
int arr[100];
int main()
{

	int num = 0;
	ifstream inFile("i.txt", ios::in);//文本模式打开
	if (!inFile)
		return 0;//打开失败
	ofstream outFile("o.txt",ios::out);
	if (!outFile)
	{
		outFile.close();
		return 0;
	}
	int x;
	while (inFile >> x)
		arr[num++] = x;
	for (int i = num - 1; i >= 0; i--)
		outFile << arr[i] << " ";
	inFile.close();
	outFile.close();
	return 0;
}

ostream::write 成员函数:ostream & write(char* buffer, int count);

c 复制代码
class Person
{
public:
	char m_name[20];
	int m_age;
};
int main()
{

	Person p;
	ofstream outFile("o.bin", ios::out | ios::binary);
	while (cin >> p.m_name >> p.m_age)
		outFile.write((char*)&p, sizeof(p));//强制类型转换
	outFile.close();
	//heiren 烫烫烫烫烫烫啼  
	return 0;
}

一个字节一个字节地读写,不如一次读写一片内存区域快。每次读写的字节数最好是 512 的整数倍

c 复制代码
#include <iostream>
#include <fstream>
//#include <vector>
//#include<cstring>
using namespace std;

class Person
{
public:
	char m_name[20];
	int m_age;
};
int main()
{


	Person p;
	ifstream ioFile("p.bin", ios::in | ios::out);//用既读又写的方式打开
	if (!ioFile) 
		return 0;
	ioFile.seekg(0, ios::end); //定位读指针到文件尾部,以便用以后tellg 获取文件长度
	int L = 0, R; // L是折半查找范围内第一个记录的序号
				  // R是折半查找范围内最后一个记录的序号
	R = ioFile.tellg() / sizeof(Person) - 1;
	do {
		int mid = (L + R) / 2; 
		ioFile.seekg(mid *sizeof(Person), ios::beg); 
		ioFile.read((char *)&p, sizeof(p));
		int tmp = strcmp(p.m_name, "Heiren");
		if (tmp == 0)
		{ 
			cout << p.m_name << " " << p.m_age;
			break;
		}
		else if (tmp > 0) 
			R = mid - 1;
		else  
			L = mid + 1;
	} while (L <= R);
	ioFile.close();

	system("pause");
	return 0;
}
相关推荐
繁星蓝雨24 分钟前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
蒸蒸yyyyzwd1 小时前
机试学习笔记
c++·求职招聘
handler012 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
郝学胜-神的一滴2 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
hetao17338374 小时前
校内场-提高组 ZYZSC-S-Round 4
c++·算法
stellanke5 小时前
Linux网络编程实战2:TCP Socket 基础与实践
linux·网络·c++
蒸蒸yyyyzwd5 小时前
机试和Redis学习笔记
c++·笔记·面试
tdtsmt6 小时前
2026年SMT贴片加工选型指南:天地通电子推荐参考
c++
一木 之林6 小时前
插件、MCP、Skill 的区别?
java·c++·人工智能
ShineWinsu6 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询