Lista plikow... blad :/

0
 Fik := FindFirst(Katalog + '*.*', faAnyFile, SR);
 lKat := Fik;
 while (Fik = 0) do
  begin
   Status.Caption := 'Wysyłanie pliku ' + IntToStr(lKat - Fik) + ' z ' + IntToStr(lKat);
   FTP.Put(Katalog + SR.Name, SR.Name);
   Fik := FindNext(SR);
  end;
 FindClose(SR);

Powyzszy kod, jak pewnie zauwazyliscie, wysyla wszystkie pliki z katalogu na serwer ftp. Ale jest w nim blad - nie moze znalezc ani jednego pliku, chociaz sciezka jest dobra. Co robic?

0

Fik := FindFirst(Katalog + '.', faAnyFile, SR);
lKat := Fik;
while (Fik = 0) do

Imho ten fragment jest bez sensu .. wyszukujesz pliki i dałeś while (Fik = 0) ?

0

I sprawdź, czy w zmiennej Katalog masz na końcu znaczek ''.

0

Detox, thx za uwage. Przynajmniej nie wyswietla bledow teraz :) Ale w dalszym ciagu ilosc wyszukanych plikow rowna sie zeru... :(

Na koncu Dira jest . Sciezka jest poprawna, sprawdzalem przez debugowanie.

0

FindFirst zwraca wartość = 0 jeśli znajdzie plik a FindNext zwraca wartość <> 0 jeśli znajdzie plik więc jeśli znajdzie plik wychodzi z pętli, przynajmniej mi się tak zdaje bo ja zawsze robię inną pętle do wyszukiwania plików.

Na oko to będzie tak:

var SR:TSearchRec;ile,lKat,Fik:integer;Katalog:string;
begin
  Katalog:='C:\WWW\';
  Fik := FindFirst(Katalog + '*.*', faAnyFile, SR);
  lKat := Fik;
  ile:=0;
  if Fik=0 then repeat
    Inc(ile);
    Status.Caption := 'Wysyłanie pliku ' + IntToStr(ile) + ' z ' + IntToStr(lKat);
    FTP.Put(Katalog + SR.name, SR.name);
    Fik := FindNext(SR);
  until Fik<>0;
  FindClose(SR);
end;

// dop - poprawiłem :-D

0

W dalszym ciagu nie znajduje ani jednego pliku :/

//dopisane
Nie potrzebuje konkretnie tej procki. Moze byc inna, chodzi mi tylko o cos prostego, dzieki czemu moge zrobic cos z kazdym plikiem po kolei z katalogu.

0

no to przykładowa procka z jednego mojega proga, kasuje cały folder z wszystkimi podkatalogami, zamiast kasowania, możesz je wysyłac na serwer:

procedure skasujFolder(dir:string);
var files:TSearchRec;
begin
 {$I-}
 if FindFirst(dir+'\*.*',39,files)=0 then repeat
  if (files.Attr and 16)=0 then begin
   FileSetAttr(dir+'\'+files.Name,32);
   DeleteFile(dir+'\'+files.Name);
  end;
 until FindNext(files)<>0;
 FindClose(files);
 if FindFirst(dir+'\*.*',55,files)=0 then repeat
  if (files.Attr and 16)<>0 then begin
   if (files.Name<>'.') and (files.Name<>'..') then begin
   skasujFolder(dir+'\'+files.Name);
   end;
  end;
 until FindNext(files)<>0;
 FindClose(files);
 RmDir(dir);
 IOResult;
 {$I+}
end;

//dop aha no to teraz widze że jest dokładnie na odwrót niż ja pisałem :-D

0

Sprawdzone..

var
  FileSR: TSearchRec;
  Found: Integer;
begin
  Found := FindFirst(Katalog + '*.*', faAnyFile, FileSR);
  while Found = 0 do
  begin
    Status.Caption := // ...
    FTP.Put(Katalog + FileSR.name, FileSR.name);
    Found := FindNext(FileSR);
  end;
end;
0

Wiecie co... Smiac mi sie chce :D

Dzieki wszystkim za pomoc, a szczegolnie Tobie Milka za znalezienie arta...

Czemu sie smieje? Moj kod byl dobry. Zbraklo jednej linijki:

if (SR.name <> '.') and (SR.name <> '..') then

Dzieki przede wszystkim za cierpliwosc...

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