当我单击按钮时,我希望将用户输入的字符串值存储在文件中。
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
)与属于 .NET 一部分的 C++/CLI 类(如 System::String
)混合在一起。这是行不通的。
您可以通过以下2种方式之一解决:
将 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)文件 I/O 并直接写入
task_name
。另一个问题是您没有正确打开
std::ofstream
。myFiles.open("allTask.txt", fstream::out,fstream::app);
应该是:
//---------------------------------------v--------------
myFiles.open("allTask.txt", fstream::out | fstream::app);