如何在C++中对txt文件进行读写

在写程序的时候经常会遇到关于文件读写的问题,今天在这里给大家作一点简单的分享,自己将来如果忘了也可以回顾一下嘻嘻。如果有不足的地方还请大家指正!(目前自己也还只是一个代码小白)

在C++程序中读写txt文件我们首先需要包含一个头文件fstream
fstream是C++中用于操作文件的输入输出流类,文件流在构造时或通过调用成员open与文件关联。该类的对象维护一个filebuf对象作为其内部流缓冲区,该缓冲区对与之关联的文件执行输入/输出操作(如果有的话)。

ifstream是文件输入流,从文件中读取数据。
ofstream是文件输出流,将东西输出到文件中。

将文件流与文件相关联有两种方式:
第一种:使用带参数的构造函数,创造文件对象时就关联。
 ofstream file(“xx.txt”);
 …
 file.close();
第二种:创建一个文件对象,构造时没有关联,之后通过调用open函数来关联。
 ofstream file;
 file.open(“xx.txt”);
 …
 file.close();

下面介绍相关的函数操作
一、打开文件:
open()是fstream类中用来打开文件的,它的函数原型是:
void open (const char* filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
void open (const string& filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
如果文件流已经与一个文件相关联(或者说已打开),那么这个函数调用失败。
mode是描述文件输入输出请求模式的标志。

二、关闭文件:
close()是fstream类中用来关闭文件的,功能是关闭当前与对象关联的文件,将其与流分离。

三、读取文件:
1、提取格式化输入 >>
应用于输入流的这个操作符(>>)称为提取操作符。它作为成员函数重载:
1)算术类型
举例:istream& operator>> (bool& val);(bool可以是其他多种类型)
从流中按顺序提取和解析字符,将它们解释为正确类型的值的表示形式,该值存储为val的值。
2)流缓冲区(这种目前接触的不多可以忽略不看)
istream& operator>> (streambuf* sb );
从流中提取尽可能多的字符,并将它们插入到由sb指向的流缓冲区对象(如果有的话)控制的输出序列中,直到输入序列耗尽或函数无法插入到sb指向的对象中为止。
3)流操纵符
在标准istream对象上使用有效的一些标准流操纵符有:
ws:提取空格
dec/hex/oct:十、十六、八进制。
(还有很多其他的)
感觉提取格式化输入就是可以进行一些格式上的提取输入叭,可以进行筛选出自己想要的。
2、get
读取字符
提取单个字符有两种形式:
1)int get();//直接得到字符作为返回值。
2)istream& get (char& c);//将得到的字符复制给c。
也可以读取字符串,作为c-string。
istream& get (char* s, streamsize n);
istream& get (char* s, streamsize n, char delim);
delim缺省值是’\n’,这种方式的读取不会将最后的delimiting character包含进内。不管提取的是不是空字符串,都会在结尾添加’\0’。
3、getline
读取一行
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
这种方式和get的不同在于getline读取终止符后会丢弃,下次将不会再读取该字符。
4、read
读取数据块
istream& read (char* s, streamsize n);
从流中读取出n个字符,并将它们存储在s指向的数组中。如果输入流在未读完n个字符就结束了(到达文件结尾),那么由s指向的那个数组包含了直到那一点的所有字符,并且eofbit和failbit都会被设置。
5、ignore
提取和丢弃字符
istream& ignore (streamsize n = 1, int delim = EOF);
从输入序列中提取字符并丢弃它们,直到提取了n个字符,或者其中一个与delim比较相等。
如果到达文件末尾,该函数还将停止提取字符。如果提前到达(在提取n个字符或查找delim之前),函数将设置eofbit标志。
6、bool eof() const
这个函数是检测eof位是否被设置,当按与流关联的顺序到达文件末尾时,所有标准输入操作都将设置此标志。注意,这个函数返回的值取决于对流执行的最后一个操作(而不是下一个)。
这个经常是在读取文件的时候判断是否读完。
while(!eof()){


}
四、文件定位
C++ I/O操作有两个跟文件相关联的指针:读指针和写指针。
读指针说明输入操作在文件中的位置;写指针说明下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置,seekp是设置写位置。
seekg
(1) istream& seekg (streampos pos);//相对于起始位置的绝对位置
(2) istream& seekg (streamoff off, ios_base::seekdir way);//相对位置
seekp
(1) ostream& seekp (streampos pos); //相对于起始位置的绝对位置
(2) ostream& seekp (streamoff off, ios_base::seekdir way);
off:
偏移量,跟way相关。
way:
value      offset is relative to…
ios_base::beg  beginning of the stream
ios_base::cur  current position in the stream
ios_base::end  end of the stream
tellg
返回在输入流的位置
tellp
返回在输出流的位置

你可能感兴趣的:(日常问题)