idFTP wysyłanie całego folderu

0

Jest możliwość aby IdFTP wrzucał mi na serwer całe wyznaczone (z memo) foldery wraz z zawartością? Jak jest to prosze podać jak bo google nie znalazło :/

0

Pobierz do memo nazwy plików wraz z pełną scieżką dostępu a potem wyślij je w jakiejś pętli na serwer .

0

Nie wiem czy dobrze kombinuje ale na http://www.festra.com/eng/snip04.htm masz przykład
funkcji która generuje listę plików w danym katalogu i wszystkich podkatalogach o podanej
masce (możesz podać '.' - dla wszystkich plików). A później zrobić coś w stylu kodu na
poniższej stronie (przewiń strone do dołu lub wcisnij End żeby zobaczyć odpowiedzi.):
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22889148.html
tylko że tutaj jest dla plików .csv, ale można to przerobić. Mam nadzieję, że Cię nieco
naprowadziłem, sam póki co kombinuje z tą procką do wyszukiwania podkatalogów, bo przy
większej ilości katalogów trwa ona trochę długo i chćę prawidłowo pokazać jej postęp.

EDIT: dzięki poniższemu kodowi do StringListy trafia lista plików o masce . oraz katalogi,
które należy utworzyc - zakończone dwoma znakami kropki. Później tak jak pisze kamerok
po połączeniu z serwerem w pętli wysyłasz pliki z listy na FTP, tworząc odpowiednio katalogi.

function TMainForm.IsDirectory(SR : TSearchRec) : boolean;
begin
   isDirectory := ((sr.Attr and faDirectory > 0)
                            and (sr.Name <> '..'));
end;

procedure TMainForm.FindFiles(FilesList: TStringList; StartDir, FileMask: string);
var
  SR: TSearchRec;
  DirList: TStringList;
  IsFound: Boolean;
  i: integer;
begin
  if StartDir[length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  IsFound := (FindFirst(StartDir+FileMask, faAnyFile{-faDirectory}, SR) = 0);
  while IsFound do begin
    if IsDirectory(SR) then
    else
    FilesList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);
  DirList := TStringList.Create;
  IsFound := FindFirst(StartDir+'*.*', faAnyFile, SR) = 0;
  while IsFound do
  begin
    if ((SR.Attr and faDirectory) <> 0)
    and (SR.Name[1] <> '.')
    then
      DirList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);
  for i := 0 to DirList.Count - 1 do
    FindFiles(FilesList, DirList[i], FileMask);
  DirList.Free;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  FilesList: TStringList;
begin
  FilesList := TStringList.Create;
  try
    FindFiles(FilesList, DirLabel.Caption, '*.*');
    FindFilesListBox.Items.Assign(FilesList);
  finally
    FilesList.Free;
  end;
end;

Same nazwy katalogów do utworzenia można sprawdzić na przykład w taki sposób.
Poniższa procedura jest wyowłana po drukrotnym kliknięciu na ListBox z listą plików,
ale możesz ją użyć w pętli i ewentualnie zmodyfikować. Mam nadzieję że pomogłem.

procedure TMainForm.FindFilesListBoxDblClick(Sender: TObject);
var
DirName, ItemName : string;
begin
ItemName := ExtractFileName(FindFilesListBox.Items[FindFilesListBox.ItemIndex]);
if ItemName = '..' then
begin
DirName := ExtractFileDir(FindFilesListBox.Items[FindFilesListBox.ItemIndex]);
repeat
Delete(DirName, 1, Pos('\', DirName));
until
Pos('\', DirName) = 0;
ShowMessage(DirName);
end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1