【发布时间】:2013-05-23 10:02:48
【问题描述】:
我想通过 win32 中的打开文件对话框获取完整的文件路径。 我是通过这个函数来做的:
string openfilename(char *filter = "Mission Files (*.mmf)\0*.mmf", HWND owner = NULL) {
OPENFILENAME ofn ;
char fileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = owner;
ofn.lpstrFilter = filter;
ofn.lpstrFile = fileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt = "";
ofn.lpstrInitialDir ="Missions\\";
string fileNameStr;
if ( GetOpenFileName(&ofn) )
fileNameStr = fileName;
return fileNameStr;
}
它工作正常并返回路径。但我无法写入那个文件,我用 openfilename 获取它的路径。
注意: 我调用此代码写入文件(序列化):
string Mission_Name =openfilename();
ofstream ofs ;
ofs = ofstream ((char*)Mission_Name.c_str(), ios::binary );
ofs.write((char *)&Current_Doc, sizeof(Current_Doc));
ofs.close();
【问题讨论】:
-
你检查
fileNameStr的值了吗? -
LPCSTR演员让我毛骨悚然...MyfilePath的声明是什么? -
我认为(不确定)这将是您的字符串转换中
\0的问题。 -
Zigma 我检查了值,它是真的并且包含完整的文件路径。
-
很多问题。不要尝试写入 c:\program 文件中的文件。不要将二进制数据写入 .txt 文件。不要忽视错误检查的要求。