C++ 访问文本文件c+的特定行+;

C++ 访问文本文件c+的特定行+;,c++,C++,我想访问文本文件中的特定行以显示或修改该行。我的文本文件包含不同长度的行,我听说不能对这些文件使用seekg或seekp。我有一个密码,但不起作用。有人能告诉我,这是其他一些有用的想法的错吗 #include <fstream> #include <limits> #include <string> #include <iostream> std::fstream& GotoLine(std::fstream& file, uns

我想访问文本文件中的特定行以显示或修改该行。我的文本文件包含不同长度的行,我听说不能对这些文件使用seekg或seekp。我有一个密码,但不起作用。有人能告诉我,这是其他一些有用的想法的错吗

#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
)。 或者,使用on
std::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
所做的吗?