Char未正确保存到文件中

时间:2011-04-03 05:58:38

标签: c++-cli

我想将ComboBox的内容保存到文件中。下面的代码正确显示带有“Marker 4”的MessageBox(ComboBox中的文本),但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址或类似的东西?如何正确地将“Marker 4”-string输出到文件?

private: System::Windows::Forms::ComboBox^  cmbMarker;
private: System::String^ strMarkerText; 

...

strMarkerText = this->cmbMarker->Text;

...

ofstream myfile;

WIN32_FIND_DATA data;
pin_ptr<const wchar_t> wname = PtrToStringChars(strMarkerText);
FindFirstFile(wname, &data);

::MessageBox(0, wname, L"Marker inserted", MB_OK);

myfile <<"=====MARKER '" << wname << "' INSERTED AT " << datetime << " =====" << endl;

[这个片段可能不止这个错误,我不是来自C ++ / CLI背景,但感谢您的帮助!没有编译器错误,代码运行正常,除了上述问题,即不是明文字符串内容写入文件(“标记4”),而是“03038D8C”。]

谢谢,
尼克

3 个答案:

答案 0 :(得分:1)

问题是你正在使用带有宽字符串的窄流。使用std::wofstream代替std::ofstream,它应该可以正常工作。

话虽如此,我同意@jonsca - 为什么将iostream拖入C ++ / CLI应用程序?

答案 1 :(得分:0)

我不确定您的应用程序的要求,但您是否考虑使用函数的.NET“等价物”,例如System::IO::Directory方法(特别是GetFiles代替FindFirstFile ),System::IO::StreamWriter代替ofstream对象?这样,本节中的代码就会与代码的CLR部分相吻合。

我知道这并不是你所要求的,但我觉得你的代码中的指针可能需要以不同的方式处理,而且我不确定是否必须跨托管/非托管屏障进行编组。

答案 2 :(得分:0)

我最终将System::String^转换为std:str并直接插入(而不是将其转换为wchar_t)。

本机c ++和CLI之间的混合是因为我正在构建一个以原生c ++构建的SDK示例,但是想要向它添加一个表单(在Visual Studio 2008中),这将它变成了这种“混合”。我意识到这不是最佳的,但到目前为止,似乎工作:-)!如果我遇到更多错误,我将尝试仅使用CLI等效项。谢谢你的帮助!