C ++ fstream没有读取整个文件

时间:2018-03-29 04:27:57

标签: c++ fstream ifstream

编辑:

我发现了我的错误。它与文本文件本身有关。我设法制作了两个不同大小的文本文件;并且在比较尺寸时引用了错误的文件。

对于评论和回复的所有人,我确实考虑了所有的反馈。谢谢!

在大学课堂上工作。我一直很难搞清楚如何阅读.txt文件的全部内容,其中包含“爱丽丝梦游仙境”的完整文字。

某些背景信息:

这只是构建一个openCL程序的起点,该程序将为字符串搜索执行MapReduce(即计算次数" Alice"显示在文本中)。该程序正在Ubuntu虚拟机上编译和运行;稍后为FPGA编译。

Ubuntu告诉我文件大小是148,545字节。 我的代码是53073字节。当我尝试将其打印出来时,它也没有读出整个文件。

在功能上,代码当前在文件的一部分上工作(Alice in Wonderland文本)。但它似乎没有阅读/搜索整个文本。我一直在寻找我的困境的答案,但是我没有成功。

原来如此! 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <math.h>
#include <fstream>
#include "CL/opencl.h"
#include "AOCL_Utils.h"
using namespace std;

int main(int argc, char** argv) {


    string line;
    long wordMatch, wordLength;
    wchar_t* inputLine;
    ifstream inputText;
    inputText.open("alice.txt", ifstream::binary | ifstream::in); // Open the text
    inputText.seekg(0, ios::end);
    int length = inputText.tellg(); // Gives back the wrong byte size
    cout << length << "\n";
    inputText.close();

    char * textBuffer = new char [length];
    wordMatch = 0;

    inputText.open("alice.txt"); // Could've just seeked to the start

    inputText.read(textBuffer, inputText.gcount()); 

    //cout << inputText.gcount() << " bytes in file \n"; // Trying to get correct bytesize

    while(getline(inputText,line)) // Read out the text, but stops before it's finished
    {
        cout << line << "\n";
    }

    inputLine = (wchar_t*) "Alice"; // What we're counting occurrences of

    // My little counting routine. Works fine.
    for (int i = 0; i < length; i++)
    {
        if (textBuffer[i] == inputLine[0])
        {
            wordLength = 0;
            if (textBuffer[i] == inputLine[0]) {
                while (textBuffer[i+wordLength] == inputLine[wordLength]) { 
                    //cout << textBuffer[i+wordLength] << " and " << inputLine[wordLength] << "\n"; 
                    wordLength++;
                }
                if (inputLine[wordLength] == 0) {
                        wordMatch++;                    
                } 
            }

        }

    }
    inputText.close();
    cout << length << " bytes \n";
    cout << wordMatch << "\n";


  return 0;
}

1 个答案:

答案 0 :(得分:0)

我认为您发布的代码中的一个问题就在于:

inputText.read(textBuffer, inputText.gcount()); 

我怀疑,关闭文件并重新打开后,gcount()返回的内部计数器将设置为零。

当我将该行更改为:

int n = inputText.gcount();
cout << "n: " << n << "\n";
inputText.read(textBuffer, n); 

我得到了

n: 0

作为输出。

我会将该行更改为:

inputText.read(textBuffer, length);