Страница 1 из 1

Удаление файлов путем SHFileOperation

СообщениеДобавлено: 16.01.2015 21: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 11:09:29
Лекс Айрин
Скорее всего, опять проблема с кодировками.

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 12:27:00
ivanov1
Лекс Айрин писал(а):Скорее всего, опять проблема с кодировками.
Да частично решил проблему при помощи utf8toutf16.

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 13:54:38
Ism
Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 18:35:55
ivanov1
Ism писал(а):Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?
Подскажите если не затруднит, мы не в курсе. Недавно пользуюсь лазарусом.

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 19:13:33
Alexx2000
Код: Выделить всё
DeleteFileUTF8

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 22:58:04
ivanov1
Alexx2000 писал(а):
Код: Выделить всё
DeleteFileUTF8
Не хотел использовать этот метод и рекурсию, т.к. разобраться в проблеме интереснее.

Re: Удаление файлов путем SHFileOperation

СообщениеДобавлено: 17.01.2015 23: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 10: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;
Проблема во мне :D