Показать сообщение отдельно
  #8  
Старый 12.04.2014, 01:18
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Если кому то понадобиться то вот исправленный код

Код:
function MoveDir(const fromDir, toDir: string): Boolean;
var
 sr:  TSearchRec;
 fos: TSHFileOpStruct;
 fl:  TStrings;
 Buf: TBuffer;
 s1, s2, ToS: string;
begin
 fl:= TStringList.Create;
 if fromDir=ExtractFilePath(ParamStr(0)) then //Если ЕХЕ-шник в той же папке которую хотим переместить то
   begin
  if FindFirst(fromDir  + '*.*', faAnyFile, sr) = 0 then
 repeat
if (sr.Name = '.') or (sr.name = '..') then Continue;
 if (sr.Attr and faDirectory) <> 0 then 
 //MoveDir(fromDir + sr.Name, toDir) если это не поменять на
 fl.Add(fromDir + sr.Name) //то пустые папки в директории не перемещаются 
  else
   if sr.Name <> ExtractFileName(ParamStr(0)) then fl.Add(fromDir + sr.Name);
 until FindNext(sr) <> 0;
FindClose(sr);
 //Спросите тут почему не использовал POS
 //Просто чтоб избавить прогу от цикла
 s1:= ExtractFileDir(ParamStr(0));
 s2:= ExtractFilepath(ExtractFileDir(ParamStr(0)));
 delete(s1, 1, length(s2));
 ToS:=toDir+s1+'\'; //К пути куда идет перемещение добавляем Название папки с которого перемешаем файлы по отдельности
 end else // конец проверки пути ЕХЕ-ника
   begin
    fl.Add(fromDir); //Если ЕХЕ-шник не в той папке которую мы перемешаем то
    ToS := toDir; //Путь не меняем
   end;
 CreateBuffer(fl, Buf);
 
 ZeroMemory(@fos, SizeOf(fos));
  with fos do
   begin
    wFunc  := FO_MOVE;
    fFlags := FOF_FILESONLY or FOF_NOCONFIRMMKDIR;
    pFrom  := Pointer(Buf);
    pTo    := PChar(ToS)
   end;
 
 Result:= (0 = ShFileOperation(fos));
 Buf:= nil;
 fl.Free;
end;
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием