Как сделать удаление в корзину из программы?
Народ, подскажите, как из программы удалить файл в корзину?
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?
Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);
Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);
Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(
Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(
Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/.., а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.
Диск C: есть всегда, это раз.
Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать
Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать
Оффтоп:
Ну и как же ты убрал диск Це? Вытащил винт наверно.
Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/.., а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.
Ну, начнем с того, что С: есть не всегда, но даже если есть, а файл удаляется на диске D:, то не лучшая идея - грузить удаляемое файло на другой диск.
Папка называется не RECYCLED, а RECYCLER и содержит в себе еще несколько папок (по количеству учетных записей в системе) с именем типа GUID - по одному уникальному имени для каждой записи. К стати, файло в них хранится не под собственными именами, а под каким-то образом перекодированными. GUID, соответствующий текущему юзеру можно выцепить из HKCU\Software\Microsoft\Protected Storage System Provider...
Но что-то мне подсказывает, что удаление в корзину можно сделать гораздо легче.
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?
Выяснил, что энто делается с помощью SHFileOperation(). Теперь другая проблема - файл не хочет удаляться. Удалился только с диска С:, из папки - ни в какую.
Выяснил, что энто делается с помощью SHFileOperation(). Теперь другая проблема - файл не хочет удаляться. Удалился только с диска С:, из папки - ни в какую.
Бббылин! Строка с именем удаляемого файла, оказывается, должна завершаться не одним, а двумя нулями! Идиотизьм какой-то.
Кому тоже интересно, вот код рабочей функции:
BOOL SafeDeleteFile(LPCTSTR lpFileName)
{
TCHAR lpPath[MAX_PATH];
ZeroMemory(lpPath, sizeof(TCHAR) * MAX_PATH);
CopyMemory(lpPath, lpFileName, sizeof(TCHAR) * strlen(lpFileName));
SHFILEOPSTRUCT shfoStruct = {0};
shfoStruct.wFunc = FO_DELETE;
shfoStruct.pFrom = lpPath;
shfoStruct.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT;
if(!SHFileOperation(&shfoStruct))
return TRUE;
return FALSE;
}
Бббылин! Строка с именем удаляемого файла, оказывается, должна завершаться не одним, а двумя нулями! Идиотизьм какой-то.
Не думаю. Кажется, потому, что можно передать сразу несколько файлов функции. Надо внимательнее прочитать доку.