我无法使用 fstream 将字符串变量写入我的文件

问题描述 投票:0回答:1

当我单击按钮时,我希望将用户输入的字符串值存储在文件中。

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++ user-interface c++-cli fstream
1个回答
0
投票

您正在将本机 C++ 类(如

std::ofstream
)与属于 .NET 一部分的 C++/CLI 类(如
System::String
)混合在一起。这是行不通的。

您可以通过以下2种方式之一解决:

  1. 将 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;
    
  2. 使用 C++/CLI(即 .NET)文件 I/O 并直接写入

    task_name

    您可以在此处查看有关 .NET 文件 I/O 的更多信息:System::IO::File

另一个问题是您没有正确打开

std::ofstream

而不是:

myFiles.open("allTask.txt", fstream::out,fstream::app);

应该是:

//---------------------------------------v--------------
myFiles.open("allTask.txt", fstream::out | fstream::app);
© www.soinside.com 2019 - 2024. All rights reserved.