一、IO流
流、一连串连续不断的数据集合。
看下图,继承关系
using namespace
流类的构造函数
eg:ifstream::ifstream (const char* szFileName, int mode = ios::in, int);
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ifstream inFile("c:\\tmp\\test.txt", ios::in);if (inFile)inFile.close();elsecout << "test.txt doesn't exist" << endl;ofstream oFile("test1.txt", ios::out);if (!oFile)cout << "error 1";elseoFile.close();fstream fFile("tmp\\test2.txt", ios::out | ios::in);if (!fFile2)cout << "error 2";elsefFile.close();return 0;
}
#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);
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 的整数倍
#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;
}