Zawartość folderu na serwerze w programie

0

Mam stronę internetową i chciałbym by w moim programie jako linki (nazwy plików) wyświetlana była zawartość folderu znajdującego się na serwerze w jaki sposób doprowadzić do tego cudu [green]

0

Może przykładowo na serwerze dać skrypt PHP, niech on przeczyta zawartość folderu, sformatuje ją do wybranej postaci, a potem twój program, który zamówił stronę skryptu, niech przeczyta otrzymany (wygenerowany) kod strony i zaprezentuje wynik.

0

Albo po prostu TIdFTP + F1 ;)

0

Możesz wykorzystać moduł WinInet i funkcje: FtpFindFirstFile i InternetFindNextFile.
Dzięki WinInet nie musisz stosować żadnych dodatkowych komponentów, a rozmiar pliku EXE nie zwiększy się o kilka- kilkadziesiąt KB.
Szczegółowy opis WinInet: http://msdn.microsoft.com/library/en-us/wininet/wininet/portal.asp

Poniższa procedura zwraca listę plików i katalogów z katalogu głównego użytkownika na serwerze ftp. Do zmiany bieżącego katalogu służy funkcja FtpSetCurrentDirectory.

Przerobienie takiej listy na linki jest już banalne.

// wrzuć na formularz ListBox-a
uses ..., WinInet;

procedure TForm1.Button1Click(Sender: TObject);
var
  hOpen, hConnect, hFind: HINTERNET;
  w32fd: TWin32FindData;
  s: string;
begin
  ListBox1.Items.Clear;

  hOpen := InternetOpen('', 0, '', '', 0);

  if hOpen = nil then
  begin
    ShowMessage('InternetOpen failed!');
    Exit;
  end;

  hConnect := InternetConnect(
    hOpen, 'nazwa_hosta',
    21, 'nazwa_użytkownika', 'hasło',
    INTERNET_SERVICE_FTP, 0, 0
    );

  if hConnect = nil then
  begin
    ShowMessage('InternetConnect failed!');
    if hOpen <> nil then InternetCloseHandle(hOpen);
    Exit;
  end;

  try
    FillChar(w32fd, SizeOf(w32fd), 0);
    hFind := FtpFindFirstFile(hConnect, '*', w32fd, 0, 0);
    // * - file mask

    if hFind <> nil then
    try
      repeat
        s := w32fd.cFileName;
        if w32fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
          s := '[DIR] ' + s;
        ListBox1.Items.Add(s);
      until integer(InternetFindNextFile(hFind, @w32fd)) = 0;
    finally
      InternetCloseHandle(hFind);
    end;

  finally
    if hConnect <> nil then InternetCloseHandle(hConnect);
    if hOpen <> nil then InternetCloseHandle(hOpen);
  end;

end;
0

Dzieki Jack całkiem niezłe, to chyba załatwi mój problem. Widzę że dużo zmieniło się na forum coraz więcej chętnych do pomocy, a coraz mniej F1,Google....

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