2017-02-18 27 views
0

我一直工作在C++应用程序..我想通了如何从SaveFileDialog抢目录名和结合起来,与文本的保存一堆文件相同的文件夹,但是当我尝试将新的FileWithPathName转换为LPCTSTR时,代码最终未分配。如何转换C++ SaveFileDiolog信息,以LPCTSTR

我已经找遍了这个网站,似乎无法找到我要寻找一个真正明显的例子。如果有人能指示我一个明确的链接,或者告诉我我做错了什么,那会很好。 ;-)

  FileInfo^ fi = gcnew FileInfo(saveFileDialog1->FileName); 

      String^ fileNameWithPath = gcnew String(fi->DirectoryName) + "newName.txt"; 

      //LPCWSTR lfileNameWithPath = (LPCWSTR)(pfileNameWithPath[0]); // get temporary LPSTR // fails to get initialized 
      //LPCTSTR lfileNameWithPath = (LPCTSTR)(Marshal::StringToHGlobalAnsi(fileNameWithPath)).ToPointer(); // data returned like Chinese characters. epic fail 
+0

这是C++/CLI,而不是C++。已更改标签。 –

+0

thx巴特沃斯先生的。我在辩论使用哪一个。 –

+0

https://msdn.microsoft.com/en-us/library/bb384865.aspx –

回答

1

有几种不同的方法来进行转换。您可以使用:

#include <msclr/marshal.h> 
using namespace msclr::interop; 
using namespace System; 

String^ fileNameWithPath = gcnew String(fi->DirectoryName) + "newName.txt"; 

marshal_context context; 
LPCTSTR lfileNameWithPath = context.marshal_as<LPCTSTR>(fileNameWithPath); 

here

+0

关键信息位于include和top使用语句中。现在一切正常。非常感谢你为这些重要的项目。 –