C++ 访问文本文件c+的特定行+;
我想访问文本文件中的特定行以显示或修改该行。我的文本文件包含不同长度的行,我听说不能对这些文件使用seekg或seekp。我有一个密码,但不起作用。有人能告诉我,这是其他一些有用的想法的错吗C++ 访问文本文件c+的特定行+;,c++,C++,我想访问文本文件中的特定行以显示或修改该行。我的文本文件包含不同长度的行,我听说不能对这些文件使用seekg或seekp。我有一个密码,但不起作用。有人能告诉我,这是其他一些有用的想法的错吗 #include <fstream> #include <limits> #include <string> #include <iostream> std::fstream& GotoLine(std::fstream& file, uns
#include <fstream>
#include <limits>
#include <string>
#include <iostream>
std::fstream& GotoLine(std::fstream& file, unsigned int num)
{
file.seekg(std::ios::beg);
for(unsigned int i=0; i < num - 1; ++i)
{
file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}
return file;
}
int main()
{
using namespace std;
std::fstream& GotoLine(std::fstream& file, unsigned int num);
cout << "Starting..." << endl;
fstream file("bla.txt");
GotoLine(file, 8);
string line8;
file >> line8;
cout << "[" << line8 << "]" << endl;
// cin.get();
cout << "Finished..." << endl;
return 0;
}
#包括
#包括
#包括
#包括
std::fstream和GotoLine(std::fstream和file,unsigned int num)
{
seekg(std::ios::beg);
for(无符号整数i=0;i\n
或\r\n
或\n\r
,这取决于操作系统以及可能的文件读取模式-二进制或文本-)
在20世纪60年代或70年代,IBM大型机操作系统有“文件”系统,它确实有由固定长度的线组成的文件,模仿穿孔卡
因此,您必须逐行读取文件,并记住行限制的位置(或用于跳到\n
)。
或者,使用onstd::ifstream
-s将文件的每一行读入std::vector
对于/etc/fstab
(或/proc/mounts
)读取向量中的所有行是一个好主意,因为它总是一个很小的文件。它通常不到几十行,每个行通常不到100个字符。病理病例可能是一个有数千行注释的文件,但实际上并没有发生这种情况
string line8;
file >> line8;
将只提取到命中第一个空白字符
您可以使用以下内容:
string line8;
getline(file, line8);
这至少对我在Windows 7和VS2012上的其余代码起到了作用。有用的想法1:使用调试器逐步完成代码…思考下一行应该做什么,然后点击调试器中的“步骤”,然后查看它实际做了什么。有用的想法2:当向其他人寻求帮助时,“它不起作用”不是很具有描述性。您应该告诉代码做什么/它如何工作,以及它与应该做什么/它应该如何工作有什么不同。有用的想法3:当使用任何系统或库函数时,总是检查错误,并且(例如)在发生错误时打印错误消息(请参阅)。这不是
fstream::ignore
所做的吗?