目录
文件流的状态检查
s.is_open( )
文件流是否打开成功,
s.eof( ) 流s是否结束
s.fail( )
流s的failbit或者badbit被置位时, 返回true
failbit: 出现非致命错误,可挽回, 一般是软件错误
badbit置位, 出现致命错误, 一般是硬件错误或系统底层错误, 不可挽回
s.bad( )
流s的badbit置位时, 返回true
s.good( )
流s处于有效状态时, 返回true
s.clear( )
流s的所有状态都被复位
文件流的定位
seekg
seekg( off_type offset, //偏移量
ios::seekdir origin ); //起始位置
作用:设置输入流的位置
参数1: 偏移量
参数2: 相对位置
beg 相对于开始位置
cur 相对于当前位置
end 相对于结束位置
读取当前程序的最后50个字符
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
ifstream infile;
infile.open("定位.cpp");
if (!infile.is_open()) {
return 1;
}
infile.seekg(-50, infile.end);
while (!infile.eof()) {
string line;
getline(infile, line);
cout << line << endl;
}
infile.close();
system("pause");
return 0;
}
tellg
返回该输入流的当前位置(距离文件的起始位置的偏移量)
获取当前文件的长度
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
ifstream infile;
infile.open("定位.cpp");
if (!infile.is_open()) {
return 1;
}
// 先把文件指针移动到文件尾
infile.seekg(0, infile.end);
int len = infile.tellg();
cout << "len:" << len;
infile.close();
system("pause");
return 0;
}
seekp
设置该输出流的位置
先向新文件写入:“123456789”
然后再在第4个字符位置写入“ABC”
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
ofstream outfile;
outfile.open("test.txt");
if (!outfile.is_open()) {
return 1;
}
outfile << "123456789";
outfile.seekp(4, outfile.beg);
outfile << "ABC";
outfile.close();
system("pause");
return 0;
}
常见错误总结
1.文件没有关闭
文件没有关闭, close(),可能导致写文件失败
2.文件打开方式不合适
3.在VS2015的部分版本中,当sscanf和sscanf_s的格式字符串中含有中文时,可能会读取失败。
在vs2019中未发现该类问题。
标签:文件,33,seekg,位置,C++,include,open,infile From: https://blog.csdn.net/m0_57667919/article/details/143231710