Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать удаление в корзину из программы?

1.6K
23 ноября 2004 года
GDragon
67 / / 11.10.2002
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?
301
23 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by GDragon
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?


Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);

 
Код:
if(!MoveFile("c:/myfile.txt","c:/Recycled/myfile.txt"))MessageBox(NULL,"Can't delete myfile.txt","My application",MB_OK);
1.6K
23 ноября 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by lord Kelvin

Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);

 
Код:
if(!MoveFile("c:/myfile.txt","c:/Recycled/myfile.txt"))MessageBox(NULL,"Can't delete myfile.txt","My application",MB_OK);


Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(

301
23 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by GDragon

Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(


Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/.., а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.

4.8K
23 ноября 2004 года
xm...
45 / / 20.11.2004
Цитата:
Originally posted by lord Kelvin

Диск C: есть всегда, это раз.



Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать

301
23 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by xm...


Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать


Оффтоп:
Ну и как же ты убрал диск Це? Вытащил винт наверно.

1.6K
23 ноября 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by lord Kelvin

Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/.., а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.


Ну, начнем с того, что С: есть не всегда, но даже если есть, а файл удаляется на диске D:, то не лучшая идея - грузить удаляемое файло на другой диск.
Папка называется не RECYCLED, а RECYCLER и содержит в себе еще несколько папок (по количеству учетных записей в системе) с именем типа GUID - по одному уникальному имени для каждой записи. К стати, файло в них хранится не под собственными именами, а под каким-то образом перекодированными. GUID, соответствующий текущему юзеру можно выцепить из HKCU\Software\Microsoft\Protected Storage System Provider...
Но что-то мне подсказывает, что удаление в корзину можно сделать гораздо легче.

1.6K
23 ноября 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by GDragon
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?


Выяснил, что энто делается с помощью SHFileOperation(). Теперь другая проблема - файл не хочет удаляться. Удалился только с диска С:, из папки - ни в какую.

1.6K
23 ноября 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by GDragon

Выяснил, что энто делается с помощью 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;
}

10
23 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by GDragon
Бббылин! Строка с именем удаляемого файла, оказывается, должна завершаться не одним, а двумя нулями! Идиотизьм какой-то.


Не думаю. Кажется, потому, что можно передать сразу несколько файлов функции. Надо внимательнее прочитать доку.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог