如何从文件中读取 EOF 之前并将其放入字符串中?
How to read just before EOF from a file and put it into a string?
我的函数读取一个文件并将其放入一个字符串中,以便我对其进行处理。显然,我需要在 EOF 之前阅读。问题是 EOF 字符也放在字符串中,我找不到绕过它的方法,因为它会导致程序的其他部分失败。我link下面的函数。
string name_to_open, ret = string();
ifstream in;
getline(cin, name_to_open);
in.open(name_to_open.c_str());
if (!in.is_open()) {
cout << "Error." << endl;
return string();
}
else {
ret += in.get();
while (in.good()) {
ret += in.get();
};
};
in.close();
return ret;
该函数在文件末尾读取正常,然后附加 EOF 和 \0。我该如何解决这个问题? EOF 字符在控件中是否正常工作?我也试着在循环的末尾放一行ret[ret.size() - 1] = '[=11=]';
,但这似乎也不起作用。
ret += in.get();
将从磁贴中读取的字符附加到字符串中,无论读取的值是否正确。您需要 1) 读取,2) 测试读取是否有效以及读取的值是否可以安全使用,3) 使用读取的值。当前您的代码读取、使用然后测试读取的值是否可以安全使用。
可能的解决方案:
int temp;
while ((temp = in.get()) != EOF) // read and test. Enter if not EOF
{
ret += static_cast<char>(temp); // add the character
};
注意:get
return 是 int
,而不是 char
。这是为了能够在不与现有有效字符冲突的情况下插入 EOF 等带外代码。立即将 return 值视为 char
可能会导致错误,因为特殊代码可能会被错误处理。
注意:有许多更好的方法可以将整个文件读入字符串:How do I read an entire file into a std::string in C++?
我的函数读取一个文件并将其放入一个字符串中,以便我对其进行处理。显然,我需要在 EOF 之前阅读。问题是 EOF 字符也放在字符串中,我找不到绕过它的方法,因为它会导致程序的其他部分失败。我link下面的函数。
string name_to_open, ret = string();
ifstream in;
getline(cin, name_to_open);
in.open(name_to_open.c_str());
if (!in.is_open()) {
cout << "Error." << endl;
return string();
}
else {
ret += in.get();
while (in.good()) {
ret += in.get();
};
};
in.close();
return ret;
该函数在文件末尾读取正常,然后附加 EOF 和 \0。我该如何解决这个问题? EOF 字符在控件中是否正常工作?我也试着在循环的末尾放一行ret[ret.size() - 1] = '[=11=]';
,但这似乎也不起作用。
ret += in.get();
将从磁贴中读取的字符附加到字符串中,无论读取的值是否正确。您需要 1) 读取,2) 测试读取是否有效以及读取的值是否可以安全使用,3) 使用读取的值。当前您的代码读取、使用然后测试读取的值是否可以安全使用。
可能的解决方案:
int temp;
while ((temp = in.get()) != EOF) // read and test. Enter if not EOF
{
ret += static_cast<char>(temp); // add the character
};
注意:get
return 是 int
,而不是 char
。这是为了能够在不与现有有效字符冲突的情况下插入 EOF 等带外代码。立即将 return 值视为 char
可能会导致错误,因为特殊代码可能会被错误处理。
注意:有许多更好的方法可以将整个文件读入字符串:How do I read an entire file into a std::string in C++?