IdFTP Tworzenie katalogu "User/Data"

0

Chcialbym utworzyć na moim FTP katalog User a w nim tworzyły by się foldery z aktualną datą. I kopiowane do niego byłyby obrazki.

IdFTP.MakeDir('/' +User+'/'+ FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now));
for i:=0 to PoliczSS('D:\')-1 do
IdFTP.Put('D:\'+IntTOStr(i)+'.jpg','/' +User+'/'  + FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now) + '/' +IntToStr(i)+'.jpg');
IdFtp.Disconnect;

Po odpaleniu, wywala mi taki błąd :
user image

0

Nikt nie da rady ?

0

Może tak:

var CurrData: String;

if not IdFTP.Connected then
 IdFTP.Connect;

IdFTP.MakeDir(User);   {tworzymy katalog}
IdFTP.ChangeDir(User);   {jesteśmy w ../User/}
CurrData:= FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now);   {zapamiętujemy aktualną date}
IdFTP.MakeDir(CurrData);   {tworzymy katalog}
IdFTP.ChangeDir(CurrData);   {jesteśmy w ../User/JakaśData/}

for i:=0 to PoliczSS('D:\') - 1 do
 IdFTP.Put('D:\' + IntToStr(i) + '.jpg', IntToStr(i) + '.jpg', false);   {dodajemy pliki}
IdFTP.Disconnect;

W każdym razie wywala błąd,

IdFTP.MakeDir('/' +User+'/'+ FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now));   {np. 2008-11-24-21-14-13}
for i:=0 to PoliczSS('D:\')-1 do
IdFTP.Put('D:\'+IntTOStr(i)+'.jpg','/' +User+'/'  + FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now) + '/' +IntToStr(i)+'.jpg');   
{tu będzie późniejszy czas, np. 2008-11-24-21-14-45}
IdFtp.Disconnect;

ponieważ od procedury MakdeDir do PoliczSS mija pewien czas i to powoduje brak znalezienia folderu.

0

To dziwne bo..

czas:=FormatDateTime('YYYY_MM_DD_HH_NN_SS', Now);
IdFTP.MakeDir('/'+User +'/' + czas);
for i:=0 to PoliczSS('D:\')-1 do
IdFTP.Put('D:\'+IntTOStr(i)+'.jpg','/' +User+'/' + czas + '/' +IntToStr(i)+'.jpg');
IdFtp.Disconnect;

W każdym folderze jest plik, a to znaczy że działa tylko...

Wywala mi błąd

Can't create directory: File exists ! 74 files used (0%)...
I to nie jeden raz.. ten błąd wywala co jakieś 30 plików ( timer tworzenia folderów to 1 sekunda)
Przecież każdy z tych folderów ma niepowtarzalną nazwę jak myślę to jak może coś istnieć z przyszłości ?

0

Nie bardzo rozumiem, ale ty umieściłeś to w OnTimer, a Interval dałeś na 1000 (1s) xd. Jeśli tak, to ja bym stworzył osobną procedurę...

procedure PutFiles;

a w niej:

 Timer.Enabled := false;
Czas := ''; 
if not IdFTP.Connected then
 IdFTP.Connect;
Czas := FormatDateTime('YYYY_MM_DD_HH_NN_SS', Now);
IdFTP.MakeDir('/' + User + '/' + Czas);
for i:=0 to PoliczSS('D:\') - 1 do
 IdFTP.Put('D:\' + IntToStr(i) + '.jpg', '/' + User + '/' + Czas + '/' + IntToStr(i) + '.jpg', false);
IdFTP.Disconnect;
Timer.Enabled := true;

W OnTimer:

 PutFiles;
0

Teraz mi krzyczy AV że to wirus AdAware : Reklamiarz [green]
Chyba ten Twój 1 kod zadziała, ale on chce tworzyć za każdym razem katalog User i dlatego wywala mi błąd że File exists, dlatego jak sprawdzić za pomocą procedury IF czy katalog "user" istnieje" , jeśli tak to ChangeDir..

0
if not FileExists(User) then
IdFTP.MakeDir(User); {tworzymy katalog}

To mi nie chce działać..

0

1. Sposób:

var CurrData: String;

Czas := '';
if not IdFTP.Connected then
 IdFTP.Connect;

try
 IdFTP.MakeDir(User);
finally
 IdFTP.ChangeDir(User);
 CurrData := FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now);
 IdFTP.MakeDir(CurrData);
 IdFTP.ChangeDir(CurrData);

 for i:=0 to PoliczSS('D:\') - 1 do
  IdFTP.Put('D:\' + IntToStr(i) + '.jpg', IntToStr(i) + '.jpg', false);
 IdFTP.Disconnect;
end;

2. Sposób:

Czas := '';
if not IdFTP.Connected then
 IdFTP.Connect;
Czas := FormatDateTime('YYYY_MM_DD_HH_NN_SS', Now);

try
 IdFTP.MakeDir('/' + User + '/' + Czas);
finally
 for i:=0 to PoliczSS('D:\') - 1 do
  IdFTP.Put('D:\' + IntToStr(i) + '.jpg', '/' + User + '/' + Czas + '/' + IntToStr(i) + '.jpg', false);
 IdFTP.Disconnect;
end;

Nie wiem czy zadziała, popróbuj.

0

W tym 1 sposobie zamiast:

Czas := '';

trzeba:

CurrData := '';

Nie byłem zalogowany, a postu nie mogłem edytować.

0

Dzieki za odpowiedz ! Nie miałem neta do teraz wiec teraz moge to sprawdzic...
Tworzy folder User a w nim 1 folder z aktualną datą, wszystko jest w timerze więc procedura tworzenia folderu User się powtarza a to powoduje że wyskakuje error File exists.
Cały problem się pojawił, bo Fileexists nie działa na FTP... a ja już nie wiem jak sprawdzić czy folder istnieje..
Hmm.. W totalcmd zwraca odpowiedź :
257 : Folder został pomyślnie utworzony.
550 : Nie można utworzyć folderu.
Może by jakoś wykorzystać te komunikaty.. ?

0

Przepraszam, ale nie mogę edytować, mój błąd.
Myślałem również nad taką składnią :

If NOT IdFTP.ChangeDir(User);   {jesteśmy w ../User/} then begin
IdFTP.MakeDir(User);   {tworzymy katalog}
else
IdFTP.ChangeDir(User);   {jesteśmy w ../User/}

Ale wyskakują mi błędy w kompilatorze..
I nad boolean, ale to chyba bez sensu..

0

Próbowałem już z try.. itp..
Widocznie nie ma możliwości sprawdzenia czy katalog istnieje na FTP..

0

Jakby nie było możliwości sprawdzenia, czy dany katalog już istnieje na serwerze, to tak, jakby nie istniała funkcja FileExists...

twoim problemem obecnie jest wyłapanie wyjątku, jaki generuje się podczas, gdy katalog istnieje. Może przestudiuj plik IdFTP.pas i poszukaj tam procedury MakeDir, a następnie sprawdź jakie wyjątki są z nią powiązane.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.