Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
Извнт, не по вашей модификации шил, придётся вам свои прибамбасы ещё раз прикручивать, но вроде это не смертельно. Проверил в таком варианте несколько раз - работает
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Electronic_Arts (15.04.2014)
  #17  
Старый 15.04.2014, 01:27
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Одним словом пришлось браться за отладчик и посмотреть что не так
оказалось вся проблема в этом
Код:
 s1:= ExtractFileDir(ParamStr(0));
 s2:= ExtractFilepath(ExtractFileDir(ParamStr(0)));
 delete(s1, 1, length(s2));
 ToS:=toDir+s1+'\';
 createdir(tos);  

createdir(tos);
Нужно было сперва создать директорию а потом перемешать туда все
первоначальный код исправный перемешаются даже пустые папки
оказалось дело не в WinAPI а у меня))))


Alegun спасибо за все... было приятно что не оставили одного в поле битвы..
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter