c++ - 无法关闭 OPENFILENAME

标签 c++ file winapi getopenfilename

我使用 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() 将自动将所选文件锁定为“在程序中打开”并防止在程序运行期间对文件夹进行任何修改(如删除或重命名).但我想禁用此属性。

最佳答案

如果您没有在 OPENFILENAME 中使用 OFN_NOCHANGEDIR 标志,GetOpenFileName 打开目录句柄,您可以在其中选择文件并将其设置为当前目录。正是这个文件夹句柄防止删除它。您可以使用 OFN_NOCHANGEDIR 标志或在删除文件夹之前将当前目录更改为另一个。对 windows 目录说 - 你不能删除它:

WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);

关于c++ - 无法关闭 OPENFILENAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166280/

相关文章:

windows - 如何在 Windows 命令行上获取文件的创建日期?

winapi - f# 中的 Win32 api 调用错误 GetShortPathName

c# - 将 .lib 和 .h 文件转换为 .NET

c++ - Qt 从布局中取出一个小部件,但保持当前位置

c++ - 通过指针从c++中的函数返回数组,但是程序如何知道数组大小?

android - 如何在替换之前从内存中删除文件

php - 在 PHP 中使用用户输入的变量设置文件名

c - 什么时候应该使用 Win32/WinAPI 类型与标准 C 类型?

c++ - 将透明图标加载到应用程序的托盘菜单

c++ - 抛出匿名异常子类