#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;
}