C++ C++;将文件传递给字符串

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

嗨,我正在尝试将整个文件传递到字符串中。这是我的代码,但程序总是在第一个if()时退出。我只是无法理解我在这里做错了什么

#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(){}作为提示。所以我想我必须使用它。我也更新了我的问题。