Не удается закрыть OPENFILENAME

Я использую 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 () автоматически блокирует выбранный файл как «открытый в программе» и предотвращает любые изменения папки во время выполнения программы (например, удаление или переименование). Но я хочу отключить это свойство.

1

Решение

если вы не используете OFN_NOCHANGEDIR флаг в OPENFILENAME GetOpenFileName открыть дескриптор для каталога, где вы выбираете файл и устанавливаете его в качестве текущего каталога. именно этот дескриптор папки не позволяет удалить его. ты можешь использовать OFN_NOCHANGEDIR Отметьте или перед удалением папки измените текущий каталог на другой. скажи каталогу windows — не удаляй

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

Другие решения

Некоторое другое приложение имеет открытый дескриптор папки, которую вы хотите удалить. Windows не может удалить папку, если есть другие клиенты, имеющие дело с данными, хранящимися в папке.
Для решения этой проблемы вы можете попробовать:

  • Проверьте, есть ли какие-либо открытые окна проводника, которые показывают папку / любой содержащий файл из этой папки, которую вы хотите удалить
  • Проверьте, открыты ли какие-либо командные строки и в их текущем каталоге установлена ​​папка, которую вы хотите удалить.
  • Проверьте, использует ли ваше приложение (или любое другое) какие-либо данные из этой папки (например, блокнот, который открыл текстовый файл из этой папки, например)
0

По вопросам рекламы [email protected]