Страница 1 из 1
Удаление файлов путем SHFileOperation
Добавлено: 16.01.2015 20:18:34
ivanov1
Код: Выделить всё
function FileOperation(s:string;Action:integer):boolean;
var
SHFO: TSHFileOpStruct;
begin
ZeroMemory(@shfo, SizeOf(shfo));
with SHFO do begin
wnd := Application.MainFormHandle;
wFunc := Action; // fo_delete;
pFrom := PChar(s+#0);
pTo := nil;
fFlags := FOF_ALLOWUNDO ;
end;
Result := SHFileOperation(SHFO)=0;
end;
Здравствуйте дорогие программисты.
Вопрос такой - почему то функция не удаляет файлы с русскими именами. Как исправить не знаю. Функция выдает ошибку "2" // SHFileOperation(SHFO)=2
Может кто сталкивался с этой проблемой. Буду благодарен за любой ответ.
'C:\Users\mi\Desktop\Activator\Новый текстовый документ.txt' - это файл
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 10:09:29
Лекс Айрин
Скорее всего, опять проблема с кодировками.
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 11:27:00
ivanov1
Лекс Айрин писал(а):Скорее всего, опять проблема с кодировками.
Да частично решил проблему при помощи utf8toutf16.
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 12:54:38
Ism
Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 17:35:55
ivanov1
Ism писал(а):Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?
Подскажите если не затруднит, мы не в курсе. Недавно пользуюсь лазарусом.
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 18:13:33
Alexx2000
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 21:58:04
ivanov1
Не хотел использовать этот метод и рекурсию, т.к. разобраться в проблеме интереснее.
Re: Удаление файлов путем SHFileOperation
Добавлено: 17.01.2015 22:34:12
Alexx2000
Так в чем проблема то? Если конкретно интересует SHFileOperation то, вот пример (удаление в корзину):
Код: Выделить всё
function mbDeleteToTrash(const FileName: String): Boolean;
var
wsFileName: WideString;
FileOp: TSHFileOpStructW;
dwFileAttributes: LongWord;
begin
wsFileName:= UTF8Decode(FileName);
wsFileName:= wsFileName + #0;
FillChar(FileOp, SizeOf(FileOp), 0);
FileOp.Wnd := Application.MainFormHandle;
FileOp.wFunc := FO_DELETE;
FileOp.pFrom := PWideChar(wsFileName);
// Move without question
FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT or FOF_NOCONFIRMATION;
Result := (SHFileOperationW(@FileOp) = 0) and (not FileOp.fAnyOperationsAborted);
end;
Re: Удаление файлов путем SHFileOperation
Добавлено: 18.01.2015 09:19:53
ivanov1
Alexx2000 писал(а):Так в чем проблема то? Если конкретно интересует SHFileOperation то, вот пример (удаление в корзину):
Код: Выделить всё
function mbDeleteToTrash(const FileName: String): Boolean;
var
wsFileName: WideString;
FileOp: TSHFileOpStructW;
dwFileAttributes: LongWord;
begin
wsFileName:= UTF8Decode(FileName);
wsFileName:= wsFileName + #0;
FillChar(FileOp, SizeOf(FileOp), 0);
FileOp.Wnd := Application.MainFormHandle;
FileOp.wFunc := FO_DELETE;
FileOp.pFrom := PWideChar(wsFileName);
// Move without question
FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT or FOF_NOCONFIRMATION;
Result := (SHFileOperationW(@FileOp) = 0) and (not FileOp.fAnyOperationsAborted);
end;
Проблема во мне
