无法关闭 OPENFILENAME

Car*_*arl 1 c++ winapi file 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))
    {

    }
Run Code Online (Sandbox Code Playgroud)

这段代码是我创建和使用 OPENFILENAME 变量的地方,GetOpenFileName() 会自动将所选文件锁定为“在程序中打开”,并防止在程序运行时对文件夹进行任何修改(例如删除或重命名)。但我想禁用这个属性。

RbM*_*bMm 5

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

WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);
Run Code Online (Sandbox Code Playgroud)