Когда я нажимаю кнопку, я хочу, чтобы строковое значение, введенное пользователем, сохранялось в файле.
private: System::Void add_task_Click(System::Object^ sender, System::EventArgs^ e) {
ofstream myFiles;
myFiles.open("allTask.txt", fstream::out,fstream::app);
String^ task_name = task->Text;
tasks_list->Items->Add(task_name);
if (myFiles.is_open()) {
myFiles << task_name;
myFiles.close();
}
}
Это не работает. Что я делаю не так?
Как определить, что вы не можете этого сделать? Пожалуйста, добавьте информацию о ваших ожиданиях и фактическом результате.
Вы смешиваете собственные классы C++ (например, std::ofstream
) с классами C++/CLI, которые являются частью .NET (например, System::String
). Так не пойдет.
Решить ее можно одним из двух способов:
Преобразуйте C++/CLI String
в собственный C++ std::string
, а затем запишите его в std::ofstream
:
#include <msclr\marshal_cppstd.h> // required for msclr::interop::marshal_as
// ...
std::string task_name_cpp = msclr::interop::marshal_as<std::string>(task_name);
// ...
myFiles << task_name_cpp;
Используйте ввод-вывод файла C++/CLI (т. е. .NET) и записывайте task_name
непосредственно в него.
Дополнительную информацию о вводе-выводе файлов .NET можно найти здесь: System::IO::File.
Другая проблема в том, что вы неправильно открываете std::ofstream
.
Вместо:
myFiles.open("allTask.txt", fstream::out,fstream::app);
Должен быть:
//---------------------------------------v--------------
myFiles.open("allTask.txt", fstream::out | fstream::app);
Должен был быть параметр
fstream::out | fstream::app
или у вас опечатка с,
? Кроме того, C++/CLI ≠ C++. Должно быть, нравится, как Objective-C++ ≠ C++.