number, j, a - глобальные.
На FTP:
function TfrmMain.UpDir (dir : string) : string;
Var i : integer;
begin
for i := length (dir) downto 0 do
if dir[i] = '/' then
begin
Delete(dir, i, length (dir) );
Break;
end;
UpDir := dir;
end;
function TfrmMain.DirList_loc (dir : string) : TSTrings;
var sr: TSearchRec;
list : TStrings;
begin
list := TStringList.Create;
list.Clear;
if FindFirst(dir + '\*.*', faAnyFile, sr) = 0 then
begin
repeat
if (sr.Name <> '.') AND (sr.Name <> '..') then
list.Add(sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
DirList_loc := list;
end;
procedure TfrmMain.LOC_TO_S_CopyDir (from_dir, to_dir: String);
var dir : TStrings;
i : integer;
begin
dir := TStringList.Create;
dir.Clear;
dir := DirList_loc (from_dir);
FTP.MakeDir (to_dir);
for i := 0 to dir.Count - 1 do
If GetFileAttributes(PChar(from_dir + '\' + dir[i])) <> FILE_ATTRIBUTE_DIRECTORY
then
FTP.Put(from_dir + '/' + dir[i], to_dir + '/' + dir[i] )
else
begin
cats.Add(from_dir + '\' + dir[i]);
s_c.Add(to_dir + '/' + dir[i]);
end;
while j < cats.Count do
begin
inc (j);
if a=true then
begin
a:=false;
number := cats.Count;
end
else
begin
from_dir := UpDir (from_dir);
to_dir := UpDir (to_dir);
if j=number then
a:=true;
end;
LOC_TO_S_CopyDir(cats[j-1], s_c[j-1]);
end;
end;
На компьютер:
function TfrmMain.ShortDir (dir : string) : string;
Var i : integer;
begin
for i := length (dir) downto 0 do
if dir[i] = '\' then
begin
dir := Copy(dir, i+1, length (dir) );
Break;
end;
ShortDir := dir;
end;
function TfrmMain.DelDir(dir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
pFrom := PChar(dir + #0);
end;
Result := ((0 = ShFileOperation(fos)) AND removedir(dir));
end;
procedure TfrmMain.S_TO_LOC_CopyDir(from_dir, to_dir: String);
var dir : TStrings;
i : integer;
begin
dir := TStringList.Create;
dir.Clear;
dir := DirList (from_dir);
if DirectoryExists(to_dir) = True then
DelDir (to_dir);
mkdir (to_dir);
for i := 0 to dir.Count - 1 do
if (FTP.Size(from_dir + '/' + dir[i]) <> -1) then
FTP.Get(from_dir + '/' + dir[i], to_dir + '/' + dir[i], False , FTP.CanResume )
else
begin
cats.Add(from_dir + '/' + dir[i]);
s_c.Add(to_dir + '/' + dir[i]);
end;
while j < cats.Count do
begin
inc (j);
if a=true then
begin
a:=false;
number := cats.Count;
end
else
begin
from_dir := UpDir (from_dir);
to_dir := UpDir (to_dir);
if j=number then
a:=true;
end;
S_TO_LOC_CopyDir(cats[j-1], s_c[j-1]);
end;
end;
IdFTP1.Put(f2, f1, false);
IdFTP1.Get(f2, f1,true);
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.