C++ C++;将文件传递给字符串
嗨,我正在尝试将整个文件传递到字符串中。这是我的代码,但程序总是在第一个if()时退出。我只是无法理解我在这里做错了什么C++ C++;将文件传递给字符串,c++,C++,嗨,我正在尝试将整个文件传递到字符串中。这是我的代码,但程序总是在第一个if()时退出。我只是无法理解我在这里做错了什么 #include <iostream> #include <fstream> #include <string> std::string readFile (std::string filename); int main() { std::string filename; std::string Eingabestrin
#include <iostream>
#include <fstream>
#include <string>
std::string readFile (std::string filename);
int main() {
std::string filename;
std::string Eingabestring;
std::cout << "Geben Sie eine Datei an" << std::endl;
std::cin >> filename;
Eingabestring = readFile(filename);
std::cout << Eingabestring << std::endl;
return 0;
}
std::string readFile (std::string filename)
{
std::string zeile,inhalt ;
std::ifstream quelle;
quelle.open(filename.c_str());
if (!quelle)
{
std::cerr << filename << " kann nicht geöffnet werden!\n";
return exit(-1);
}
while (!quelle.eof())
{
getline(quelle,zeile);
inhalt = inhalt + zeile;
}
return inhalt;
}
#包括
#包括
#包括
std::string readFile(std::string文件名);
int main(){
std::字符串文件名;
std::字符串Eingabestring;
std::cout文件名;
Eingabestring=readFile(文件名);
std::cout尝试以下方法来读取文件:
std::string readFile (std::string filename)
{
std::ifstream quelle(filename);
std::string content( (std::istreambuf_iterator<char>(quelle) ),
(std::istreambuf_iterator<char>()) );
return content;
}
std::string读取文件(std::string文件名)
{
std::ifstream quelle(文件名);
std::字符串内容((std::istreambuf_迭代器(quelle)),
(std::istreambuf_迭代器());
返回内容;
}
除了检查open()
失败的原因(如注释中所述)之外,还要记住,在while循环中,当您从istream
读取时,有更简单的方法来检查文件的结尾
<>在C++中,从代码<> ISReRAM循环和读取的习惯方法是在循环条件下嵌入返回引用的代码表达式,将代码返回到
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
auto character = char{};
auto file_string = string{};
while (cin.get(character)) {
file_string += character;
}
cout << file_string << endl;
return 0;
}
#包括
#包括
使用std::cin;
使用std::cout;
使用std::endl;
使用std::string;
int main(){
自动字符=字符{};
自动文件_string=string{};
while(cin.get(character)){
文件字符串+=字符;
}
无法解决此特定问题,但您应该阅读。您仍然可以使用errno
和perror()检查为什么quelle.open(filename.c_str());
实际失败
。出现这种情况的原因有很多。很可能是因为您正在输入相对文件路径,如myfile.txt
。系统将在应用程序的当前工作目录中查找文件,这取决于许多因素。请尝试输入文件的绝对路径,如C:\myfile、 txt
.BTW,从返回std::string
的函数返回0;
是个坏主意。OP说他们在哪里出错的可能重复?他实际上从函数返回了一些东西,尽管第一个返回0
很奇怪。@好奇,我更新了它以符合您的规格。循环将退出wh如果istream对象已完成读取…我想补充一点,如果流遇到除EOF
@zett42更新了我的答案之外的任何错误,循环也会退出编写auto-var=type{};
而不仅仅是type-var;
或者type-var{}有什么好处;
如果您想确保始终初始化?@zett42什么都没有,只是habit@Curious这对我不起作用,因为。我想逐行读取文件,而不是每个字符。我实际上需要分析一个文件,但我仍然不知道如何做,但我的教授给了我,while(){}作为提示。所以我想我必须使用它。我也更新了我的问题。