我有以下功能,希望能告诉我文件夹是否存在,但是当我调用它时,我收到此错误 -
无法将参数1从'System :: String ^'转换为'std :: string'
功能 -
#include <sys/stat.h>
#include <string>
bool directory_exists(std::string path){
struct stat fileinfo;
return !stat(path.c_str(), &fileinfo);
}
调用(来自form.h文件,其中包含用户选择文件夹的表单) -
private:
System::Void radioListFiles_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if(directory_exists(txtActionFolder->Text)){
this->btnFinish->Enabled = true;
}
}
有人能告诉我如何拍这个吗?感谢。
答案 0 :(得分:2)
您正尝试将托管的C ++ / CLI字符串(System::String^
)转换为std::string
。没有为此提供隐式转换。
为了实现这一点,您必须处理string conversion yourself。
这可能看起来像:
std::string path = context->marshal_as<std::string>(txtActionFolder->Text));
if(directory_exists(path)) {
this->btnFinish->Enabled = true;
}
话虽如此,在这种情况下,完全坚持托管API可能更容易:
if(System::IO::Directory::Exists(txtActionFolder->Text)) {
this->btnFinish->Enabled = true;
}
答案 1 :(得分:1)
您正在尝试将CLR字符串转换为STL字符串,以将其转换为C字符串,以将其与POSIX仿真函数一起使用。为什么这么复杂?由于您仍在使用C ++ / CLI,因此只需使用System::IO::Directory::Exists
。
答案 2 :(得分:0)
要完成此项工作,您需要将托管类型System::String
转换为本机类型std::string
。这涉及一些编组并将导致2个单独的字符串实例。 MSDN有一个方便的表,用于所有不同类型的字符串编组
在这种特殊情况下,您可以执行以下操作
std::string nativeStr = msclr::interop::marshal_as<std::string>(managedStr);