Показать сообщение отдельно
  #16  
Старый 14.04.2014, 07:10
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от Electronic_Arts
[b]...Просто если бы это была тупо проблема в WINAPI то почему если я рядом создам еще одну папку "Новая папка (2)" то несмотря на то что они пустые то они перемешаются оба??
Не в натуре это эйпиайный прикол, ну любят в мелкомяконьких за людей думать что и как надо делать, факт

Появилась идея обмана - если папка-пустышка одна одинёшенька была, то создать её принудительно или пропустить это дело, если есть ещё файлы-папки, пусть ShFileOperation это делает дальше сама
Код:
function MoveDir(fromDir, toDir: string): Boolean;
var
 sr:TSearchRec;
 fos: TSHFileOpStruct;
 fl: TStrings;
 SrcBuf : TBuffer;
 dl: string; // добавлено
begin
 fl:= TStringList.Create;

 if (fromDir <> '') and (fromDir[Length(fromDir)]<>'\') then fromDir:= fromDir+'\';
  if FindFirst(fromDir  + '*.*', faAnyFile, sr) = 0 then
   repeat
    if (sr.Name = '.') or (sr.name = '..') then Continue;
    if (sr.Attr and faDirectory) <> 0 then
     begin 
      dl:= toDir + sr.Name;  // добавлено
      fl.Add(fromDir + sr.Name);
      MoveDir(fromDir + sr.Name, toDir);
     end else
   if sr.Name <> ExtractFileName(ParamStr(0)) then  fl.Add(fromDir + sr.Name);

   until FindNext(sr) <> 0;
 FindClose(sr);
 CreateBuffer( fl, SrcBuf );

 ZeroMemory(@fos, SizeOf(fos));
  with fos do
   begin
    wFunc  := FO_MOVE;
    fFlags := FOF_FILESONLY or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    pFrom  := Pointer(SrcBuf);
    pTo    := PChar(toDir)
   end;

 Result:= (0 = ShFileOperation(fos));
 SrcBuf:= nil;

 if (fl.Count = 1) and (dl <> '') then ForceDirectories(dl);  // добавлено

 fl.Free;
end;
Извнт, не по вашей модификации шил, придётся вам свои прибамбасы ещё раз прикручивать, но вроде это не смертельно. Проверил в таком варианте несколько раз - работает
Ответить с цитированием