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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение ivanov1 » 16.01.2015 21:18:34

Код: Выделить всё
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' - это файл
ivanov1
новенький
 
Сообщения: 32
Зарегистрирован: 03.01.2015 16:25:04

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

Сообщение Лекс Айрин » 17.01.2015 11:09:29

Скорее всего, опять проблема с кодировками.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение ivanov1 » 17.01.2015 12:27:00

Лекс Айрин писал(а):Скорее всего, опять проблема с кодировками.
Да частично решил проблему при помощи utf8toutf16.
ivanov1
новенький
 
Сообщения: 32
Зарегистрирован: 03.01.2015 16:25:04

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

Сообщение Ism » 17.01.2015 13:54:38

Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение ivanov1 » 17.01.2015 18:35:55

Ism писал(а):Зачем вообще такие извращения, если в fpc для этого есть штатные средства ?
Подскажите если не затруднит, мы не в курсе. Недавно пользуюсь лазарусом.
ivanov1
новенький
 
Сообщения: 32
Зарегистрирован: 03.01.2015 16:25:04

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

Сообщение Alexx2000 » 17.01.2015 19:13:33

Код: Выделить всё
DeleteFileUTF8
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение ivanov1 » 17.01.2015 22:58:04

Alexx2000 писал(а):
Код: Выделить всё
DeleteFileUTF8
Не хотел использовать этот метод и рекурсию, т.к. разобраться в проблеме интереснее.
ivanov1
новенький
 
Сообщения: 32
Зарегистрирован: 03.01.2015 16:25:04

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

Сообщение Alexx2000 » 17.01.2015 23:34:12

Так в чем проблема то? Если конкретно интересует 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;
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение ivanov1 » 18.01.2015 10:19:53

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
ivanov1
новенький
 
Сообщения: 32
Зарегистрирован: 03.01.2015 16:25:04


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru