12.04.2014, 01:18
|
|
Местный
|
|
Регистрация: 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;
__________________
Нет ничего не возможного. Вопрос только во времени...
|