Как я могу сохранить текстовый файл в стеке, используя fstream - PullRequest
0 голосов
/ 29 октября 2018
#include <iostream>
#include <stack>
#include <fstream>

using namespace std;

int main()
{
   stack <fstream> webpages;
   fstream web1;
   fstream web2;
   fstream web3;

   web1.open("web1.txt",fstream::out);
   web2.open("web2.txt",fstream::out);
   web3.open("web3.txt",fstream::out);

   web1.close();

   webpages.push(web1);
   cout << webpages.size() << endl;

   system("pause");
}

Когда я компилирую программу, я получаю следующую ошибку:

станд :: basic_fstream> :: basic_fstream (Const std :: basic_fstream> &): попытка ссылка на удаленную функцию

поэтому я предполагаю, что то, как я это делаю, неправильно. Есть ли способ хранить файлы fstream в стеке?

1 Ответ

0 голосов
/ 29 октября 2018

Я предполагаю, что вы хотите хранить текст в файлах в вашем стеке, а не в реальных объектах fstream? Если это так, будет проще хранить содержимое файлов в виде строк.

#include <iostream>
#include <stack>
#include <fstream>
#include <sstream>

int main()
{
    std::stack <std::string> webpages;
    for(const auto& file : {"web1.txt", "web2.txt", "web3.txt"}) {
        std::fstream page(file);
        std::stringstream ss;
        ss << page.rdbuf();
        webpages.emplace(ss.str());
    }
    std::cout << webpages.size() << "\n"; // will print "3"

    std::cout << "-- pages read --\n";
    for(;!webpages.empty(); webpages.pop()) {
        std::cout << webpages.top() << "\n";
    }
}

Редактировать: Как уже указывалось, вы действительно хотите открыть некоторые файлы для записи, так что вот версия для этого.

#include <stack>
#include <fstream>

int main()
{
    std::stack<std::fstream> webpages;

    for(const auto& file : {"web1.txt", "web2.txt", "web3.txt"}) {
        webpages.emplace(file, std::fstream::out);
    }

    for(;!webpages.empty(); webpages.pop()) {
        webpages.top() << "some text\n";
    }

    return 0;
}
...