Я использую 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 () автоматически блокирует выбранный файл как «открытый в программе» и предотвращает любые изменения папки во время выполнения программы (например, удаление или переименование). Но я хочу отключить это свойство.
если вы не используете OFN_NOCHANGEDIR
флаг в OPENFILENAME
GetOpenFileName
открыть дескриптор для каталога, где вы выбираете файл и устанавливаете его в качестве текущего каталога. именно этот дескриптор папки не позволяет удалить его. ты можешь использовать OFN_NOCHANGEDIR
Отметьте или перед удалением папки измените текущий каталог на другой. скажи каталогу windows — не удаляй
WCHAR path[MAX_PATH];
GetSystemWindowsDirectoryW(path, RTL_NUMBER_OF(path));
SetCurrentDirectoryW(path);
Некоторое другое приложение имеет открытый дескриптор папки, которую вы хотите удалить. Windows не может удалить папку, если есть другие клиенты, имеющие дело с данными, хранящимися в папке.
Для решения этой проблемы вы можете попробовать: