Я пытаюсь создать небольшую программу, в которой пользователь вводит имя файла, а имя файла записывается в текстовый файл

#c #string #file #filenames

#c #строка #файл #имена файлов

Вопрос:

Я пытаюсь сделать так, чтобы пользователь вводил имя файла, например «Hello», и создается файл с этим именем, например «Hello.txt «, и имя файла также записывается в файл, поэтому содержимое также будет «Hello». Я часами пытался найти решение, но безуспешно (извините, я новичок в этом) Приведенный ниже код.

  #include <iostream>
    #include <string>
    #include <sstream>
    #include <fstream>


    using namespace std;

    int main()
    {

    ofstream file;
    string filename;

    file.open("/Users/anthonykerr/Desktop");

    cout << "Please enter a file name to write: ";
    cin >> filename;

    file << filename << endl;

    file.close();

    cout << filename << endl;

    return 0;
  

Комментарии:

1. Итак, когда вы вызываете file.open(...) , какой файл вы открываете?

2. Ну, вам не хватает для создания этого файла или что??

3. Не используйте file.open или file.close . В соответствии с принципом RAII файл закроется, когда он выйдет за пределы области действия в конце программы. Просто используйте ofstream file{"/Users/anthonykerr/Desktop/" filename}; (который также откроет файл) после cin >> filename; .

4. Что происходит? Чего не происходит? Пожалуйста, опишите наблюдаемое поведение.

Ответ №1:

Рассмотрите возможность использования freopen . Это перенаправляет поток в файл.

 #include <iostream>
#include <cstdio>
#include <string>

int main()
{
    std::string filename;
    std::cin >> filename;

    //using freopen: 
    //              filename.c_str() is filename converted to char sequnce
    //              "w" means, that the file is opened in "write" mode
    //              stdout is the stream redirected to file
    std::freopen(filename.c_str(), "w", stdout);

    //cout was redirected to file, so filename is written in the file
    std::cout << filename;
    return 0;
}