无法关闭 OPENFILENAME
Can't close OPENFILENAME
我使用 OPENFILENAME 和函数 GetOpenFileName() 通过 windows 文件浏览器获取文件位置。
问题是当我想删除所选文件夹时(当程序 运行 而我需要这样做时)windows 显示错误:"The action can't be completed because the folder or a file in it is open in another program"
我知道它为什么这样做,但我不知道如何在运行时关闭这个文件
提前致谢。
编辑:
//Opening Save file
TCHAR *filter = _T("Story File(*.Strory*)[=10=]*.Story*[=10=]");
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() 将自动将所选文件锁定为 "open in a program" 并防止在程序运行期间对文件夹进行任何修改(如删除或改名)。但是我想禁用这个 属性.
其他一些应用程序拥有您要删除的文件夹的打开句柄。 Windows 如果有任何其他客户端处理存储在该文件夹中的数据,则无法删除该文件夹。
要解决这个问题,您可以尝试:
- 检查是否有任何打开的资源管理器 windows 显示了您要删除的文件夹/此文件夹中包含的任何文件
- 检查是否打开了任何命令提示符,并且它们的当前目录设置为您要删除的文件夹
- 检查您的应用程序(或任何其他应用程序)是否正在使用此文件夹中的任何数据(例如,打开此文件夹中的文本文件的记事本)
如果您不在 OPENFILENAME
中使用 OFN_NOCHANGEDIR
标志,则 GetOpenFileName
打开目录句柄,在其中 select 文件并将其设置为当前目录。正是这个文件夹句柄防止删除它。您可以使用 OFN_NOCHANGEDIR
标志或在删除文件夹之前将当前目录更改为另一个。对 windows 目录说 - 你不能删除它:
WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);
我使用 OPENFILENAME 和函数 GetOpenFileName() 通过 windows 文件浏览器获取文件位置。
问题是当我想删除所选文件夹时(当程序 运行 而我需要这样做时)windows 显示错误:"The action can't be completed because the folder or a file in it is open in another program"
我知道它为什么这样做,但我不知道如何在运行时关闭这个文件
提前致谢。
编辑:
//Opening Save file
TCHAR *filter = _T("Story File(*.Strory*)[=10=]*.Story*[=10=]");
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() 将自动将所选文件锁定为 "open in a program" 并防止在程序运行期间对文件夹进行任何修改(如删除或改名)。但是我想禁用这个 属性.
其他一些应用程序拥有您要删除的文件夹的打开句柄。 Windows 如果有任何其他客户端处理存储在该文件夹中的数据,则无法删除该文件夹。 要解决这个问题,您可以尝试:
- 检查是否有任何打开的资源管理器 windows 显示了您要删除的文件夹/此文件夹中包含的任何文件
- 检查是否打开了任何命令提示符,并且它们的当前目录设置为您要删除的文件夹
- 检查您的应用程序(或任何其他应用程序)是否正在使用此文件夹中的任何数据(例如,打开此文件夹中的文本文件的记事本)
如果您不在 OPENFILENAME
中使用 OFN_NOCHANGEDIR
标志,则 GetOpenFileName
打开目录句柄,在其中 select 文件并将其设置为当前目录。正是这个文件夹句柄防止删除它。您可以使用 OFN_NOCHANGEDIR
标志或在删除文件夹之前将当前目录更改为另一个。对 windows 目录说 - 你不能删除它:
WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);