我使用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()会自动将所选文件锁定为“在程序中打开”,并防止在程序运行期间对文件夹进行任何修改(如删除或重命名) )。但我想禁用此属性。
答案 0 :(得分:4)
如果你没有在OFN_NOCHANGEDIR
OPENFILENAME
目录的打开句柄中使用GetOpenFileName
标志,则选择文件并将其设置为当前目录。正是这个文件夹句柄阻止删除它。您可以使用OFN_NOCHANGEDIR
标志或删除文件夹之前更改当前目录。对Windows目录说 - 你不能删除它:
WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);
答案 1 :(得分:0)
其他一些应用程序拥有您要删除的文件夹的打开句柄。如果有任何其他客户端处理存储在该文件夹中的数据,则Windows无法删除该文件夹。 要解决这个问题,您可以尝试: