IdFTP i przepisanie do tablicy

IdFTP i przepisanie do tablicy
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Cześć,

Chcę pobrać wszystkie pliki z jednego katalogu serwera i zapisać ich nazwy i właściwości do tablicy.
Nie mam koncepcji jak to zrobić. Próbowałem przez IdFTP1.List(bufor), '', True) ale to droga przez mękę.
Jak to można sensownie zrobić?

Pozdrawiam.

edytowany 1x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0
Markoni napisał(a):

ale to droga przez mękę.

znaczy co??


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
SV
  • Rejestracja:ponad 13 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Warszawa
  • Postów:62
0

Też właśnie nie wiem co to za "męka" :)
Robisz sobie pętlę po plikach danego katalogu ftp , pobierasz każdy i zapisujesz nazwę do tablicy ...

MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

W jaki sposób pobrać z takiego strumienia nazwę pliku, który jest po siódmym średniku?

po funkcji: IdFTP1.List(Lista, '', True)

robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Zielona Góra
0

zerknij na funkcję Split

MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Z tym Split-em to nie jest tak prosto. Gdy w katalogu jest dużo plików to w Splicie musiałbym odbierać wielokrotność siódmego średnika.
Ponieważ gdy robię Split siódmego średnika to w pętli ciągle mam pokazany tylko pierwszy plik (oczywiście Split robię przed pętlą).

robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Zielona Góra
0

@Markoni:

Markoni napisał(a):

Z tym Split-em to nie jest tak prosto. Gdy w katalogu jest dużo plików to w Splicie musiałbym odbierać wielokrotność siódmego średnika.

Ponieważ gdy robię Split siódmego średnika to w pętli ciągle mam pokazany tylko pierwszy plik (oczywiście Split robię przed pętlą).

ale troszkę się ze mnie nabijasz?
robisz rozbicie łańcucha przed pętlą a później oczekujesz że otrzymasz wynik z pętli?

w skrócie mniej więcej jak to powinno być:

  • ustawiasz się na odpowiednim folderze na ftp,
  • puszczasz pętle po elementach w tym folderze o ilości iteracji takiej jak ilość elementów w tym folderze,
  • w pętli pobierasz dane pliku i przechowujesz w jakimś TStringList lub podobnym zasobniku,
  • rozbijasz te dane za pomocą funkcji split zapisując wynik do następnego zasobnika, np. tablicy,
  • kończysz pętlę.

Oczywiście są sprawy o których trzeba pomyśleć:

  • zabezpieczenie przed wskazaniem folderu nieistniejącego,
  • co zrobić z folderami w folderze nadrzędnym:
    • pomijać,
    • wchodzić do środka i liczyć dalej?
  • co zrobić po problemach z połączeniem (to jest zasób zdalny i zawsze coś może się zdarzyć) - to wszystko trzeba przewidzieć.

Najlepiej rozrysuj to sobie w formie graficznej a później oprogramuj poszczególne elementy. To zawsze działa.

MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Masz rację, chciałem napisać że przed pętlą robię IdFTP1.List(Lista, '', True).
W "Lista" mam wtedy wszystkie pliki z danymi o nich, rozdzielone bajtami 0D 0A.
Już rozumiem. Próbuję rozdzielić w pętli, ale ciągle mam pokazany (w każdej linijce) tylko pierwszy plik.

Po prostu nie wiem jak przesuwać w 'Lista' ofset aby Splitować następną linijkę. Jak to się robi?

robertz68
pokaż kawałek kodu
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Fragment:

Kopiuj
               IdFTP1.List(Lista, '', True);

               for i := 1 to Lista.Count do
               begin
                   Splitted := Lista.Text.Split([';'], 8);
                   Memo1.Lines.Add(IntToStr(i)+'> '+Splitted[7]);
               end;

gdzie, Lista: TStrings.
I tu trzeba rozdzielić długi string "Lista" z kolejnymi danymi plików. W powyższej pętli oczywiście pokazany jest tylko pierwszy plik z Lista.

SV
  • Rejestracja:ponad 13 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Warszawa
  • Postów:62
0

Jeszcze tak możesz spróbować:

Kopiuj
      IdFTP.List;
      For I := 0 to IdFTP.DirectoryListing.Count-1 do
      Begin
        If IdFTP.DirectoryListing[I].ItemType = ditFile then
        begin
           Memo1.Lines.Add(IdFTP.DirectoryListing[I].FileName);
        end;
      End;
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

W wersji IdFTP którą posiadam nie ma DirectoryListing. Czy można to inaczej zapisać?

flowCRANE
No to czas zaktualizować pakiet, a nie szukać obejścia.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0
Svenson napisał(a):

Jeszcze tak możesz spróbować:

Kopiuj
      IdFTP.List;
      For I := 0 to IdFTP.DirectoryListing.Count-1 do
      Begin
        If IdFTP.DirectoryListing[I].ItemType = ditFile then
        begin
           Memo1.Lines.Add(IdFTP.DirectoryListing[I].FileName);
        end;
      End;

Jak zinterpretować działanie powyższej pętli?

edytowany 1x, ostatnio: Markoni
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12164
0
Kopiuj
// wylistuj zawartość bieżącego katalogu
IdFTP.List();

// przeiteruj po każdym znalezionym obiekcie
for I := 0 to IdFTP.DirectoryListing.Count - 1 do
begin
  // sprawdź, czy obiekt jest plikiem i jeśli tak
  if IdFTP.DirectoryListing[I].ItemType = ditFile then
  begin
     // dodaj jego nazwę do kontrolki
     Memo1.Lines.Add(IdFTP.DirectoryListing[I].FileName);
  end;
end;

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

W której wersji Indy występuje IdFTP.DirectoryListing?
Ja mam Indy10.

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
0

Chyba każdej 10.x w 10.6.2.0 i 10.6.2.5366 jest na pewno.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

W katalogu "\Embarcadero\Studio\20.0\source" mam podkatalogi: indy i Indy10. Gdy przeszukuję w podkatalogu Indy10 to znajduje pliki z DirectoryListing:
IdFSP.pas
IdFTP.pas
IdFTPBaseFileSystem.pas
IdFTPServer.pas

Czy trzeba coś dodać aby nie pojawiał się błąd: 'IdFTP' does not contain a member named 'DirectoryListing' gdy powyższe pliki istnieją?

MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Czy to co opisałem o plikach w poprzednim poście jest normalne?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
0

Nie chce mi się odpalać środowiska a nie pamiętam co trzeba zrobić (skoro normalnie tego nie widzi). Na moje oko patrząc w stary projekt używający tej właściwości to jeżeli do tego wymaga czegoś dodatkowo w uses może to być IdFTPList i/lub IdAllFTPListParsers.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

IdFTPList był, nie było IdAllFTPListParsers., ale po dodaniu dalej jest ten problem:

Kopiuj
Unit1.pas(176): E2003 Undeclared identifier: 'DirectoryListing'

Zupełnie nie wiem jak to ugryźć, chyba się poddam... Nigdzie nie mogę znaleźć pomocy w tym problemie.

edytowany 1x, ostatnio: flowCRANE
SV
  • Rejestracja:ponad 13 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Warszawa
  • Postów:62
0

Spróbuj jeszcze kliknąć w obiekt IdFTP w tej instrukcji przytrzymując klawisz Ctrl. Powinien otworzyć plik, w którym zdefiniowana jest klasa TIdFTP (TIdFTP = class(TIdExplicitTLSClient)) i tam sprawdź czy występuje DirectoryListing
Wygląda na to, że korzysta z nieodpowiednich referencji.

edytowany 2x, ostatnio: flowCRANE
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Niby coś jest, ale całość nie działa.

W załączniku plik: IdFTP.pas

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
1

Hmm, podejrzewam że nie za dokładnie usunąłeś Indy 9 z Delphi (podejrzewam że takie miałeś skoro pisałeś że masz folder Indy i Indy10) i z tego powodu Delphi jakimś cudem odwołuje się do IdFTP.doc (w pliku źródłowym IdFTP.pas jest OK) od indy 9 który jakimś cudem tam pozostał. Radzę usunąć Indy i zainstalować na nowo... albo do tego nawet tylko sam IdFTP.doc i koniecznie sprawdzić w ustawieniach (nie pamietam dokładnie) coś chyba w Library path czy nie ma ścieżek odnoszących się do starej wersji Indy (jeżeli są to usunąć) i czy koniecznie są wszystkie do nowej.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Nie znalazłem w katalogu Embarcadero pliku IdFTP.doc.
Z chęcią bym zainstalował ponownie Indy10, ale nie działa oficjalna strona. Gdzie można pobrać ten dodatek?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
0

Skąd wziąłeś plik IdFTP.pas? Pewnie z folderu Indy10 w którym pewnie masz wszystkie pliki potrzebne do instalacji. Ale łap https://github.com/IndySockets/Indy tylko nie wiem czy coś z tego będzie jak raczej nie potrafisz pozbyć się pozostałości.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Którą wersję z tej paczki trzeba zainstalować do Delphi 10.3?

PS: Gdybym chciał jeszcze nie instalować powyższego, to w którym miejscu są ustawienia do sprawdzenia ścieżek dla np. IdFTP?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
1

Tools->Options->Enviroment Options->Delphi Options->Library
U mnie w Browsing path mam coś takiego:

Kopiuj
$(BDS)\source\Indy10\Core
$(BDS)\source\Indy10\System
$(BDS)\source\Indy10\Protocols

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

W mojej wersji Delphi jest to w innym miejscu, ale są te same wpisy (też tylko z \Indy10)

Z tego linku githuba którą wersję zainstalować pod Delphi 10.3?
Są tylko do wersji: 5, 6, 7 i 2005, 2006, 2007, 2009

Jak w 100% pozbyć się, przed instalacją nowego, śmieci z jakichkolwiek resztek Indy i Indy10?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
0

Są przecież pakiety do Rio to te z 260 na końcu nazwy.
Jak się pozbyć starej wersji? Przede wszystkim odinstalować obecnie zainstalowaną wersję Component->Install Packages po kolei zaznaczać Indy 10 (powinno być 2 pozycje) i Remove a później na piechotę poszukać plików Id.dcu, Indy.dcu, dclIndy*.dcu oraz plików *.bpl oczywiście tylko tych nazwach takich nazwy pakietów *.dpk tych co się kompiluje i instaluje podczas instalacji Indy. Pliki oczywiście usuwa się przed instalacją.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MA
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 4 lata
  • Postów:53
0

Zupełnie nie pamiętam żebym instalował Indy10 w Delphi. Czy jest on dostarczany razem z Delphi10.3?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Gorlice
0

Z 10.3 na pewno jest Indy 10 nie pamiętam dokładnie numeru wersji ale Indy 10 na bank. Tylko nie wiem co w takim razie porobiłeś że nie widzu tej właściwości na wszelki wypadek przeinstaluj, bo inaczej dlaczego nie widzi pozostaje sprawą nie do ogarnięcia a od czegoś przecież trzeba zacząć i dążyć do celu eliminując nawet potencjalne przyczyny błędu.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)