C++逐行读取文本文件的操作中途停止

C++ reading text file line by line stops partway through

本文关键字:操作 逐行 读取 取文本 文件 C++      更新时间:2023-10-16

我有一个16900000行的文件,每行包含10个数字(int和float的混合)。我试图逐行读取这个文件,稍微修改每一行,然后写入一系列新文件。下面的代码在运行Windows Visa的笔记本电脑上运行,但当我在运行Windows 7的桌面上运行它时,输出文件并不包含输入文件中的所有数据。输出文件中的行数从2500到40000不等。

我已经注释掉了所有的处理和对文件的写入,每100行就向cout写入一行,最后一行打印并不是文件的最后一行。

// skipping code prior to the loop
// only including minimal code that reproduces the problem
ifstream infile((srcdir+filename).c_str()); 
string line;
int lcount=0;
while(getline(infile,line)){
    if(line.find("#")==string::npos){
        lcount++;
        if(lcount%100==0){
            printf("Generating tiles for %s: %d lines processedn",filename.c_str(),lcount);
        }
    }
}

问题:

  1. 是否存在可能溢出的最大缓冲区大小?

  2. 有人能看到我的代码有问题吗?

  3. 这在Windows Vista上可以正常工作,但在Windows 7上不能正常工作,有什么原因吗?

在您的问题中,信息很少。但我将把我的猜测放在这里:

我不认为lcount在代码中的正确位置递增。只有当'#'不在line中时,它才会递增(我猜这是某种注释)。但从(o包含)'#'开始的一行也必须被计数。所以你的代码应该是:

while(getline(infile,line)){
    lcount++;  // Increment every time.
    if(line.find("#")==string::npos){
        if(lcount%100==0){
            printf("Generating tiles for %s: %d lines processedn",filename.c_str(),lcount);
        }
    }
}

另一方面,你应该激活isstream异常,看看发生了什么,看看这里怎么做。

当我试图创建一个最小的完整程序来重现问题时,我发现了罪魁祸首。

我正试图用我公司正在使用的密钥锁加密狗来保护可执行文件。当我删除对加密狗的检查时,整个文件都被读取了。