无法关闭OPENFILENAME

时间:2018-01-09 10:36:54

标签: c++ file winapi getopenfilename

我使用OPENFILENAME和函数GetOpenFileName()通过Windows文件浏览器获取文件位置。

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

其他一些应用程序拥有您要删除的文件夹的打开句柄。如果有任何其他客户端处理存储在该文件夹中的数据,则Windows无法删除该文件夹。 要解决这个问题,您可以尝试:

  • 检查是否有任何打开的资源管理器窗口显示您要删除的文件夹中的文件夹/任何包含文件
  • 检查是否有任何命令提示已打开且其当前目录是否设置为您要删除的文件夹
  • 检查您的应用程序(或任何其他)是否正在使用此文件夹中的任何数据(例如,已从此文件夹中打开文本文件的记事本)