Форум » [x]Harbour » Как удалить файл в корзину? » Ответить

Как удалить файл в корзину?

SADSTAR4: FErase() сносит файл безвозвратно

Ответов - 11

AlexMyr: copy ... to ...recycle ferase может прокатит?

Pasha: Гугль говорит: Функция SHFileOperation( ) позволяет выполнить удаление файла в "Корзину". Для этого необходимо к набору флагов добавить флаг FOF_ALLOWUNDO и обязательно указать полный путь к файлу в поле pFrom. Это винапишная функция. Обертка для нее в харборе: WIN_SHFILEOPERATION Находится в hbwin.lib

gfilatov2002: SADSTAR4 пишет: Как удалить файл в корзину? См. ниже Харбор переходник (wrapper ): HB_FUNC( SENDTORECYCLEBIN ) { SHFILEOPSTRUCT sh; sh.hwnd = GetActiveWindow(); sh.wFunc = FO_DELETE; sh.pFrom = hb_parc(1); sh.pTo = NULL; sh.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; sh.fAnyOperationsAborted = FALSE; sh.hNameMappings = NULL; sh.lpszProgressTitle = NULL; SHFileOperation (&sh); } Пример использования: SendToRecycleBin( cPath + cFile + Chr(0) + Chr(0) )


PSP: gfilatov2002 пишет: + Chr(0) + Chr(0) Имхо, красивее добавлять это в самой функции.

gfilatov2002: PSP пишет: красивее добавлять это в самой функции Как говорят у нас в Одессе: Вам нужны шашечки, или ехать

PSP: gfilatov2002 пишет: Вам нужны шашечки, или ехать Мне? Я просто предположил, что так будет нативнее для Клиппера/Харбора.

SADSTAR4: Pasha пишет: Это винапишная функция. Обертка для нее в харборе: WIN_SHFILEOPERATION Находится в hbwin.lib Описания и Примеров не нашел. Только здесь http://comments.gmane.org/gmane.comp.lang.harbour.devel/31370 [pre2]+ Added: WIN_SHFileOperation( [<hWnd>], [<nFunction>], [<cFrom>|<aFrom>], [<cTo>|<aTo>], [<nFlags>], [<@lAnyOperationAborted>], [<aNameMappings>], [<cProgressTitle>] ) -> <nResult> [/pre2] Но мне этого недостаточно. gfilatov2002 пишет: SendToRecycleBin( cPath + cFile + Chr(0) + Chr(0) ) fErase() возвращает T/F. Можно ли в этой функции сделать такой возврат? P.S. Блин!!! Удаляет в корзину с урезанием имен до 8.3 ?!

gfilatov2002: SADSTAR4 пишет: Можно ли в этой функции сделать такой возврат? Держи рабочий пример без урезания имени файла (см. ниже) #include "minigui.ch" Function Main () Set Alternate To ("HMG Example.txt") Set Alternate On ? "test string" ? " " Set Alternate Off Set Alternate To DEFINE WINDOW Form1 ; AT 0,0 ; WIDTH 640 ; HEIGHT 480 ; TITLE "HMG Example" ; MAIN DEFINE MAIN MENU POPUP "Test" ITEM "Do it!" ACTION Test( GetStartupFolder() + "\", "HMG Example.txt" ) SEPARATOR ITEM "Exit" ACTION Form1.Release MESSAGE "Exit program and quit" END POPUP POPUP "About" ITEM "Info" ACTION MsgInfo( "HMG Example" ) END POPUP END MENU DEFINE STATUSBAR STATUSITEM "" DEFAULT CLOCK WIDTH 85 DATE END STATUSBAR END WINDOW CENTER WINDOW Form1 ACTIVATE WINDOW Form1 Return Nil Function Test (cPath, cFile) MsgInfo( SendToRecycleBin( cPath + cFile + Chr(0) + Chr(0) ), "Result" ) Return Nil #pragma BEGINDUMP #include "windows.h" #include "hbapi.h" HB_FUNC( SENDTORECYCLEBIN ) { SHFILEOPSTRUCT sh; sh.hwnd = GetActiveWindow(); sh.wFunc = FO_DELETE; sh.pFrom = hb_parc(1); sh.pTo = NULL; sh.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; sh.fAnyOperationsAborted = FALSE; sh.hNameMappings = NULL; sh.lpszProgressTitle = NULL; hb_retl((SHFileOperation (&sh)==0)); } #pragma ENDDUMP Надеюсь, теперь вопрос закрыт...

SADSTAR4: Возвращаемое значение есть. А имена файлов режет.

gfilatov2002: SADSTAR4 пишет: имена файлов режет Только что проверил работу примера под Win7: имя файла восстанавливается корректно из корзины. Вероятно, Вам надо перепроверить настройку Вашей системы. Возможно, в реестре задано принудительное приведение имен файлов к виду 8.3

SADSTAR4: О!!! Никогда не обращал на это внимания - обычно удаляю файлы Shift/Del. Сделал эксперимент - режутся только имена файлов с русскими буквами. Пол дня Инет рыл по этой проблеме - ничего не нашел. Может кто знает - что за заковыка такая? Где что исправить нужно? P.S. Еще эксперимент - такое обрезание только на FAT32-дисках. На NTFS - все Ок. P.S.2 Преобразую все старые разделы с FAT32 в NTFS



полная версия страницы