1

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

4

2 回答 2

5

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

WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);
于 2018-01-09T11:46:37.493 回答
0

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

  • 检查是否有任何打开的资源管理器窗口显示您要删除的该文件夹中的文件夹/任何包含文件
  • 检查是否打开了任何命令提示符,并且它们的当前目录设置为您要删除的文件夹
  • 检查您的应用程序(或任何其他)是否正在使用此文件夹中的任何数据(例如,已从该文件夹打开文本文件的记事本)
于 2018-01-09T10:43:32.343 回答