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::打开类型如下所示:

C++ 关于文件读取和输入的问题

 简便来说:

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();

来进行文件的关闭,以免出错或者打开文件再次有问题;

相关推荐