gpt4 book ai didi

c++ - GetOpenFileName() 杀死我的后台打开流 :(

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:09 26 4
gpt4 key购买 nike

有点奇怪。好的,所以我正在使用 OGRE 游戏引擎,它有一个“SceneManager”类,可以在后台打开一些文件流。如果我在使用 GetOpenFileName() 之前使用这些流,这些流工作正常,但如果我尝试在 GetOpenFileName() 之后使用这些流,则发现这些流已关闭。有人能解释一下为什么 GetOpenFileName() 会杀死我的后台流吗?

String Submerge::showFileDialog(char* filters, bool savedialog, char* title)
// need to tweak flags for open/save
{
OPENFILENAME ofn ;
char szFile[255] ;
HWND hwnd = NULL;
//getOgre()->getAutoCreatedWindow()->getCustomAttribute("WINDOW", &hwnd);

ZeroMemory( &ofn , sizeof(ofn) );
ofn.hwndOwner = hwnd;
ofn.lStructSize = sizeof ( ofn );
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof( szFile );
ofn.lpstrFilter = filters ? filters : "All files\0*.*\0";
ofn.nFilterIndex =1;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0 ;
ofn.lpstrInitialDir=NULL ;
if(title!=NULL)
ofn.lpstrTitle=title;
//ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ;

MeshLoadTest(); // this is where i use background file streams
bool success = false;
if(savedialog)
success = GetSaveFileName( &ofn );
else
success = GetOpenFileName( &ofn );
MeshLoadTest(); // this is where i use background file streams

if(!success)
return "";
String str;
str.append(ofn.lpstrFile);
return str;
return "";
}

最佳答案

请注意,GetOpenFileName() 可以并且将会更改整个进程的当前目录。这可能会干扰您正在进行的任何其他事情。

有一个名为 OFN_NOCHANGEDIR 的选项,但根据 documentation ,它是无效的:

Restores the current directory to its original value if the user changed the directory while searching for files. Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.

你应该在调用之前和之后检查当前目录;如果它发生变化,那么这可能是您的问题。在这种情况下,添加代码以保存和恢复调用 GetOpenFileName() 的当前目录。

关于c++ - GetOpenFileName() 杀死我的后台打开流 :(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com