C++ 关于文件读取和输入的问题
主要针对于机试中的IO读写问题,c语言实现和使用太过于繁琐,所以以后遇到类似题目还是用C++的;
主要包含头文件
#include<iostream> #include<fstream> #include<sstream>
一般来说,用fstream就足够够用了,他包含了istream和ostream的有点,可以直接对一个流同时进行读写;
fstream的创建和初始化如下所示:
fstream fin; fin.open("C:\\Users\\Reality\\Desktop\\iotest\\testcpp.txt", ios::in);
注意一下,win系统下所有的格式采用“//”来对路径分隔符就行转义,最好使用绝对路径,方便;
使用open(path,ios::)进行初始化,第一个参数使打开文件的完整路径,第二个参数则是打开文件的详细方式;
具体的ios::打开类型如下所示:
简便来说:
fstream读取用ios::in,输出用ios::out,如果在已有文件后进行输出则用ios::app。但是一定一定要注意,这些是针对于文本文件;
当针对于二进制文件的时候,打开文件则使用ios::binary。
这里再补充一下二进制文件和文本文件的问题:
两个在内存中的表现形式和在外存上的存储形式不一样。
尽管文件都是01二进制流构成的,但是二进制文件使可以执行的机器文件,内容就是二进制数字;
而文本文件则还需要进行ASCII码翻译过程,才能翻译成完整的文本文件。cpp/txt/html都是文本类型文件,如果使用IOS::binary进行二进制打开,则必读取失败。注意.o和.cpp文件的区别;
当使用fin.open后,最好进行是否打开文件成功的判断。
if (!fin) { cout << "Open Failure" << endl; return 0; }
直接对fin进行判断即可,当然也可以使用!fin.good()进行判断;
在读取和写入文件时,和cin、cout输入输出流类似,直接输入输出;
值得注意的是读入操作:
和cin的读入操作类似,当cin>>s时,s的类型也可以为字符串也可以为数值类型,且都是空格或者换行结尾;
当想读入整行字符串的时候,用getline(fin,s)即可,后续就是字符串的相关处理,又是老生常谈的问题;
还有,一定要记住在使用完文件进行关闭操作;
fin.close();
来进行文件的关闭,以免出错或者打开文件再次有问题;