| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > SHFileOperation не работает |
| Автор: Antony41 12.5.2009, 21:37 | ||||
| Привет! Вот обычная фун-я перемещения файла в корзину.
Категорически отказывается удалить файл C:\Стас Михайлов\06 S. Mihailov - Luchshie pesni (2007)\02 Mama.mp3 Стоит его только переименовать C:\Стас Михайлов\06 S. Mihailov - Luchshie pesni (2007)\02 Mama1.mp3 и всё встаёт на своё место. Переименовываю обратно и снова нифига не работает Файл не занят ни какими процессами и стандартным методом удаляется (через explorer), хотя и тут функция ShellAPI Аттрибуты тоже сняты. Что же это может быть? зы длина строки и размер файла значения не меняют.
|
| Автор: Mechanic 12.5.2009, 22:31 | ||
Попробуй ноль в конце имени добавить
|
| Автор: kami 12.5.2009, 22:52 |
Вообще-то все функции возвращают код ошибки, если что-то отказываются делать. Код возвращается либо в результате ф-и, либо доступен через GetLastError. Что означает код ошибки можно посмотреть в http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx В данном случае коды ошибок имеются http://msdn.microsoft.com/en-us/library/bb762164(VS.85).aspx Узнаете что за ошибка - можно будет ее устранять. |
| Автор: Keeper89 12.5.2009, 23:03 |
| Попробуйте заменить PAnsiChar на PChar. |
| Автор: kami 12.5.2009, 23:25 |
Это почему? SHFileOperation доступна и в Ansi и в Unicode версиях. Какая из них задействуется по умолчанию - дело версии Delphi, о которой тут ни слова не было. Вроде, D2009 только задействовало Unicode по умолчанию? В любом случае - если PChar=PAnsiChar, то и SHFileOperation=SHFileOperationA по умолчанию. Добавлено через 1 минуту и 14 секунд А если SHFileOperation=SHFileOperationW, то PChar=PWideChar. Так что явное приведение к Ansi тут может быть лишним. |
| Автор: Akella 12.5.2009, 23:48 |
или у нас на форуме http://forum.vingrad.ru/index.php?showtopic=237714&view=findpost&p=1733249 |
| Автор: Keeper89 12.5.2009, 23:50 |
| У меня в D2007 работают оба варианта (PAnsiChar и PChar, хотя все-таки это разные вещи). Надо смотреть либо код ошибки, либо есть особенности в конкретной версии Delphi. |
| Автор: kami 13.5.2009, 00:05 |
Это разные вещи для D2009, поскольку там PChar=PWideChar. Во всех предыдущих PChar=PAnsiChar, см. Character pointers в хелпе Delphi. Само собой, т.к. там вызывается Ansi версия SHFileOperation и PChar=PAnsiChar. Т.о. в итоге вызывается одна и та же ф-я с одними и теми же параметрами. За сим умолкаю и прошу прощения за отклонение от темы ветки. |
| Автор: Mechanic 13.5.2009, 07:34 |
| В самом деле, некоторые функи из этой оперы требуют дополнительного нуля после имени файла (см пост № 2). Этот нуль призван ограничивать список имен, если таковое не одно. Но если даже оно одно, то нуль этот не помешает. Just try. ;-) |
| Автор: CodeMonkey 13.5.2009, 09:13 | ||
http://msdn.microsoft.com/en-us/library/bb759795(VS.85).aspx:
|
| Автор: CodeMonkey 13.5.2009, 10:31 | ||
Да потому что в документации так написано. |
| Автор: Antony41 13.5.2009, 15:24 | ||
вот блин точно... для DeleteFile нужно применять #0? |
| Автор: CodeMonkey 13.5.2009, 16:10 |
| Нет, конечно же. Подсказка: функция SHFileOperation работает с кучей файлов, вот почему ей нужен двойной разделитель, т.к. группа файлов задаётся так: 'файл1'#0'файл2'#0'файл3'#0#0. |
| Автор: MetalFan 13.5.2009, 16:19 |
во выразился... куда применять? зачем?) |
| Автор: Antony41 13.5.2009, 21:24 |
| всё понятно Спасибо всем кто учавствовал тема закрыта |