C++ cli 字符未正确保存到文件

C++ cli 字符未正确保存到文件,c++-cli,C++ Cli,我想将组合框的内容保存到文件中。下面的代码正确地显示了带有“Marker 4”(组合框中的文本)的消息框,但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址还是类似的?如何将“Marker 4”-字符串正确输出到文件 private: System::Windows::Forms::ComboBox^ cmbMarker; private: System::String^ strMarkerText; ... strMarkerText = this-

我想将组合框的内容保存到文件中。下面的代码正确地显示了带有“Marker 4”(组合框中的文本)的消息框,但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址还是类似的?如何将“Marker 4”-字符串正确输出到文件

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;
private:System::Windows::Forms::ComboBox^cmbMarker;
private:System::String^strMarkerText;
...
strMarkerText=此->标记->文本;
...
流文件;
WIN32_查找_数据;
pin_ptr wname=PtrToStringChars(strmarktext);
FindFirstFile(wname和数据);
::MessageBox(0,wname,L“已插入标记”,MB_OK);

myfile我不确定您的应用程序的要求,但是您是否考虑过使用.NET函数的“等价物”,如
System::IO::Directory
方法(特别是
GetFiles
代替
FindFirstFile
),以及
System::IO::StreamWriter
代替stream
对象的
?这样,本节中的代码将与代码的CLR部分协调


我知道这并不是您想要的,但我感觉代码中的指针可能需要以不同的方式处理,我不确定是否需要跨托管/非托管屏障封送

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


话虽如此,我同意@jonsca——为什么要将iostreams拖到C++/CLI应用程序中?

我最终将
System::String^
转换为
std:str
,并直接插入它(而不是将其转换为
wchar\t


本地C++和CLI之间的混合是因为我在构建了一个在本地C++中构建的SDK示例,但是希望在它(VisualStudio 2008)中添加一个表单,将其转换成“混合”。我意识到这不是最优的,但到目前为止,它似乎是有效的:-)!我将尝试仅在以后遇到任何错误时使用CLI等价物。谢谢你的帮助

我认为使用
c++-cli
标记会更幸运是的,我刚刚意识到这不是本地的C++,但包含了微软的一些奇妙的童话灰尘:-!谢谢你的编辑!