【发布时间】:2018-06-18 09:00:36
【问题描述】:
我使用 OPENFILENAME 和函数 GetOpenFileName() 通过 windows 文件浏览器获取文件位置。
问题是当我想删除所选文件夹时(当程序运行并且我需要这样做时)窗口显示错误:“操作无法完成,因为文件夹或其中的文件在另一个程序”
我知道为什么会这样,但我不知道如何在运行时关闭此文件
谢谢,提前。
编辑:
//Opening Save file
TCHAR *filter = _T("Story File(*.Strory*)\0*.Story*\0");
HWND owner = NULL;
OPENFILENAME ofn;
TCHAR fileName[MAX_PATH] = _T("");
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 = _T("");
if (GetOpenFileName(&ofn))
{
}
此代码是我创建和使用 OPENFILENAME 变量的地方,GetOpenFileName() 将自动将所选文件锁定为“在程序中打开”,并防止在程序运行期间对文件夹进行任何修改(如删除或重命名)。但我想禁用此属性。
【问题讨论】:
-
您能否分享更多关于您正在尝试做的事情以及您遇到问题的代码 sn-p 的详细信息?
-
如果你想要@Matt,我已经进行了编辑
-
"...
GetOpenFileName()将自动将所选文件锁定为“在程序中打开”...":不,它看不到 MS 示例代码: msdn.microsoft.com/en-us/library/windows/desktop/… 当GetOpenFileName返回打开文件时,您必须调用CreateFile。 -
如果您不使用
OFN_NOCHANGEDIR标记GetOpenFileName打开文件夹的句柄,您可以在其中选择文件。正是这个文件夹句柄(当前目录)阻止删除 -
@RichardCritten:之前已经测试过了,它没有改变任何东西(我在你回答后第二次测试它,它也没有解决我的问题)。
标签: c++ file winapi getopenfilename