一、输入输出相关的类
对以上数据流相关类的解读:
istream用于输入的流类,cin是这类的对象
ostream用于输出的流类,cout是这类的对象
ifstream 用于文件读取数据的流类
ofstream用于文件写入数据的流类
iostream是既能用于输入,用于输出的类
fstream是既能从文件读取数据,也能用于文件写入数据。
1、cin,cout对应标准输入输出流
2、判断输入流结束:
(1)、如果从文件输入
freopen(“some.txt”,“r”,stdin);
那么,读到文件尾部,输入流就算结束
(2)、如果是从键盘输入,则在单独一行输入ctrl+z代表输入流结束
3、接下来介绍istream类的成员函数(个人观点,不要背,记得有这么回事,需要的时候文档)
(1)、读取输入流
istream & getline(char * buf,int bufSize)
在输入流中读取bufSize-1个字符到缓冲区buf,或读到"\n"为止
istream & getline(char * buf,int bufSize, char delim = “\n”)
在输入流中读取bufSize-1个字符到缓冲区buf,或读到delim字符为止。
两个函数都会自动在buf中读入数据结尾添加"\0"。"\n"或delim不会读入buf,但会从输入流中取走。
可以用if(!cin.getline(…))来判断输入是否结束
bool eof()判断输入流是否结束
int peek()返回下一个字符,但不从流中去掉
istream & putback(char c)将字符c放回输入流
istream & ignore(int nCount = 1, int delim = EOF)从流中删除掉最多nCount个字符,遇到EOF时结束
二、文件输入输出操作
1、可以将顺序文件看做一个优先字符构成的顺序字符流,然后像对cin,cout一样的读写
2、创建文件
ofstream outFile("test.txt",ios::out|ios::binary)
test.txt 要创建的文件的名字
ios::out 文件打开方式:
ios::out 输出到文件,删除原有内容
ios::app 输出到文件,在原有内容尾部添加
ios::binary 以二进制文件格式打开文件
也可以先创建ofstream对象,再用open函数打开
ofstream fout;
fout.open(“test.txt”, ios::out|ios::binary)
判断打开是否成功
if(!fout)
{
cout<<“File out error”<<endl;
}
文件名可以给出绝对路径,也可给相对路径。没有说路径信息,就是当前文件夹下找文件。
3、文件的读写指针:
(1)、对于输入文件,有一个读指针
(2)、对于输出文件,有一个写指针
(3)、对于输入输出文件,有一个读写指针
(4)、标识文件操作的当前位置,该指针在哪里,读写操作就在哪里进行。
例子:
ofstream fout("test.txt", ios::app);
long location = fout.tellp(); // 取得写指针的位置
location = 10;
fout.seekp(location); // 将写指针移动到第十个字节
fout.seekp(location, ios::beg) // 从第十个指针头数location个字节
fout.seekp(location, ios::cur) // 从当前位置数location个字节
fout.seekp(location, ios::beg) // 从尾部数location个字节 location可为负值
文件就是读写操作
4、二进制文件读写
read,write函数
二进制文件和文本文件的区别
linux下换行符是"\n"
window下换行符是"\r\n"
MacOS下换行符是"\r"
liunx下打开文件,用不用ios::binary没区别
windows下打开文件,如果不用ios::binary则:读取二进制文件时,所有"\r\n"会被当做"\n"处理
写入二进制文件时,写入单独的"\n",系统会自动在前加一个"\r"