如何使用 fread() 输入一个巨大的 txt 并将其放入字符串流中?
How to input a huge txt using fread() and put it into a stringstream?
我正在尝试将一个巨大的 txt 文件(大约 5 MB)输入到字符串流中,但我遇到了定义 fread() 的问题。我知道,在这里,我必须使用一个字符串来放置由 fread() 创建的字符串。这是我的代码,我不知道我的错误在哪里。我急切地等待解决方案。
FILE *f;
string buffer;
f = fopen("input.txt", "r");
fread(buffer, 1, buffer.size(), f);
stringstream s(buffer);
我认为你应该像下面这样使用 read,如果你转而使用 fread,否则 C++ STL 提供了更好的方法来做同样的事情。
文件 *f;
char buffer[1024];
std::stringstream s;
f = fopen("input.txt", "r");
while (fread(buffer, 1, 1024, f))
{
s<<buffer;
}
std::cout<<s.str();
假设您没有充分的理由不使用 C++ 标准 I/O 流,那么您可以这样做:
#include <iostream>
void process_file() {
std::stringstream s;
{
std::ifstream in("input.txt");
s << in.rdbuf();
}
...
}
再一次,您可能想问自己为什么要将文件内容放入字符串流中,而不是直接使用 ifstream...
如果出于某种原因你不想使用 C++ I/O 流,你可以像这样让它以 C 风格工作:
void process_file() {
stringstream s;
// your buffer is going to be allocated on the stack, so you may want to keep it relatively small
constexpr size_t BUFFER_SIZE = 1024;
char buffer[BUFFER_SIZE];
FILE *f = fopen("input.txt", "r");
while (fread(buffer, 1, BUFFER_SIZE, f))
{
s<<buffer;
}
fclose(f);
...
}
你的代码不是c++,而是纯c,在c++中你可以:
std::fstream f("input.txt", "r");
之后你可以像stringstream
一样使用f
而不需要任何额外的代码
我正在尝试将一个巨大的 txt 文件(大约 5 MB)输入到字符串流中,但我遇到了定义 fread() 的问题。我知道,在这里,我必须使用一个字符串来放置由 fread() 创建的字符串。这是我的代码,我不知道我的错误在哪里。我急切地等待解决方案。
FILE *f;
string buffer;
f = fopen("input.txt", "r");
fread(buffer, 1, buffer.size(), f);
stringstream s(buffer);
我认为你应该像下面这样使用 read,如果你转而使用 fread,否则 C++ STL 提供了更好的方法来做同样的事情。
文件 *f;
char buffer[1024];
std::stringstream s;
f = fopen("input.txt", "r");
while (fread(buffer, 1, 1024, f))
{
s<<buffer;
}
std::cout<<s.str();
假设您没有充分的理由不使用 C++ 标准 I/O 流,那么您可以这样做:
#include <iostream>
void process_file() {
std::stringstream s;
{
std::ifstream in("input.txt");
s << in.rdbuf();
}
...
}
再一次,您可能想问自己为什么要将文件内容放入字符串流中,而不是直接使用 ifstream...
如果出于某种原因你不想使用 C++ I/O 流,你可以像这样让它以 C 风格工作:
void process_file() {
stringstream s;
// your buffer is going to be allocated on the stack, so you may want to keep it relatively small
constexpr size_t BUFFER_SIZE = 1024;
char buffer[BUFFER_SIZE];
FILE *f = fopen("input.txt", "r");
while (fread(buffer, 1, BUFFER_SIZE, f))
{
s<<buffer;
}
fclose(f);
...
}
你的代码不是c++,而是纯c,在c++中你可以:
std::fstream f("input.txt", "r");
之后你可以像stringstream
一样使用f
而不需要任何额外的代码