gpt4 book ai didi

C++ fstream 不读取整个文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:51 24 4
gpt4 key购买 nike

编辑:

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

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

在大学类(class)的实验室工作。我一直很难弄清楚如何阅读包含“爱丽丝梦游仙境”完整文本的 .txt 文件的全部内容。

一些上下文:

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

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

在功能上,该代码目前可以处理文件的一个 block (爱丽丝梦游仙境文本)。但它似乎并没有阅读/搜索整个文本。我一直在上下寻找我的困境的答案,但一直没有成功。

那么!这是我的代码:

#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;
}

最佳答案

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

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

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

当我将该行更改为:

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

我得到了

n: 0

作为输出。

我会将该行更改为:

inputText.read(textBuffer, length); 

关于C++ fstream 不读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49548044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com