Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdFTP Dateien auflisten mit Zusatzinfos? (https://www.delphipraxis.net/153961-idftp-dateien-auflisten-mit-zusatzinfos.html)

Jamah 22. Aug 2010 19:37

IdFTP Dateien auflisten mit Zusatzinfos?
 
Moin.
Kleines Problem, gestaltet sich ungefähr so:
ich wollte eine kleinigkeit für n paar Kumpels schreiben. Die wollen Textentwürfe über einen Server austauschen. Also hab ich mir gedacht, ich bau n kleines Tool, dass dann immer bei Aufruf zum Server verbindet und von da dann einfach alle Dateien auflistet (in ein Liestview).
Ich hab mal irgendwo rausgesucht, dass man das mit IdFTP1.List(Listeview1.Items) oder so ähnlich machen kann.
Allerdings möchte ich ja die Dateigröße, denjenigen, der die Datei hochgeladen hat und das Uploaddatum.
Wie jedoch bekomme ich die Dateien so als Stringlist oder wie auch immer, dass ich die zufügen kann und dann noch Subitems.Add benutzen.
Und nun die 1.000.000€-Frage: Wie krieg ich das hin?

Danke für eure hilfe.

Luckie 22. Aug 2010 19:42

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Hast du dir schon mal die Demos von den Indys angeguckt?

Jamah 22. Aug 2010 19:49

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Jop aber da ist so viel mit Direcotry und so.
Ich möchte die Dateien ja nur auflisten. Nicht die Ordner...

jfheins 22. Aug 2010 19:52

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Alles bekommst du mit
Delphi-Quellcode:
 FFtp.List (nil, '-a', True);
guckst du hier

Dateien und Ordner jkannst du dann ja nachher ausfiltern

Luckie 22. Aug 2010 19:56

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von Jamah (Beitrag 1044214)
Jop aber da ist so viel mit Direcotry und so.
Ich möchte die Dateien ja nur auflisten. Nicht die Ordner...

Dann musst du dich eben mal etwas damit auseinandersetzen.

Jamah 22. Aug 2010 20:15

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von Luckie (Beitrag 1044217)
Zitat:

Zitat von Jamah (Beitrag 1044214)
Jop aber da ist so viel mit Direcotry und so.
Ich möchte die Dateien ja nur auflisten. Nicht die Ordner...

Dann musst du dich eben mal etwas damit auseinandersetzen.

Sehr freundliche Antwort. Schlecht gschlafen? ;)

Luckie 22. Aug 2010 20:20

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Nein. Ich wollte damit nur ausdrücken, dass man sich mit manchen Dingen eben mal etwas intensiver beschäftigen muss. Letztendlich brauchst du doch nur den Code herausnehmen, der die Ordner mit auflistet.

Jamah 25. Aug 2010 15:38

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von jfheins (Beitrag 1044215)
Alles bekommst du mit
Delphi-Quellcode:
 FFtp.List (nil, '-a', True);
guckst du hier

Dateien und Ordner jkannst du dann ja nachher ausfiltern

Woher kommt das GetFileInfo(), was du da benutzt? Ich hab einiges dazu gefunden, ist aber meißtens eine funktion zum Auslesen des Herstellers...

jfheins 25. Aug 2010 16:16

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von Jamah (Beitrag 1044916)
Woher kommt das GetFileInfo(), was du da benutzt? Ich hab einiges dazu gefunden, ist aber meißtens eine funktion zum Auslesen des Herstellers...

Das ist eine eigene Funktion, die dann auch das Icon ausliest und so. Solltest du ohne Probleme Weglassen können. (Dann halt direkt auf TIdFTP.DirectoryListing zugreifen)

Also den Code so ändern:
Delphi-Quellcode:
procedure TFtpBrowser.CreateDirectoryListing;
var
  i: Integer;
begin
    FFtp.SendCmd('TYPE A');

    FFtp.List (nil, '-a', True);

    for i := 0 to Pred (FFtp.ListResult.Count) do
      CreateItemFromFileInfo (FTP.DirectoryListing[i]);
end;

procedure TFtpBrowser.CreateItemFromFileInfo(const FileInfo: TIdFTPListItem);
var
  ListItem: TListItem;
begin
  // Mach was mit FileInfo
end;

Trotzdem hier noch der Code (bitte nicht schlagen^^)
Delphi-Quellcode:
type
 TFileInfo = record
    Directory: Boolean;
    Filename,
    Date,
    FileType: String;
    Size: Integer;
  end;

-------------------

function TFtpBrowser.GetFileInfo(Index: Integer): TFileInfo;
var
  Registry: TRegistry;
  Filename, Filedetails, TempType, TempSize: String;
begin
  Filename := FFtp.DirectoryListing[Index].FileName;
  Filedetails := FFtp.DirectoryListing[Index].Text;

  Result.Directory := Filedetails[1] = 'd';
  Result.Filename := Filename;

  if Result.Directory then
    Result.FileType := 'Ordner'
  else
  begin
    Result.FileType := ReverseString (copy (ReverseString (Filename), 1, pos ('.', ReverseString (Filename))));

    Registry := TRegistry.Create(KEY_READ);
    try
      Registry.RootKey := HKEY_CLASSES_ROOT;
      if Registry.OpenKey (Result.FileType, False) then
      begin
        TempType := Registry.ReadString('');
        Registry.CloseKey;
        if Registry.OpenKey (TempType, False) then
        begin
          TempType := Registry.ReadString('');
        end;
      end;
    finally
      Registry.Free;
    end;

    if (TempType = '') then
      Result.FileType := Trim (AnsiUpperCase (copy (Result.FileType, 2, length (Result.FileType) - 1)) + ' Datei')
    else
      Result.FileType := TempType;
  end;

  Filedetails := ReverseString(Filedetails);
  Delete (Filedetails, 1, length (Filename));

  Result.Date := ReverseString (Trim (copy (Filedetails, 1, 14)));

  try
    TempSize := Trim (copy (Filedetails, 14, 10)) + ' ';
    TempSize := Trim (copy (TempSize, 1, pos (' ', TempSize)));
    Result.Size := StrToInt (ReverseString (TempSize));
  except
    Result.Size := 0;
  end;
end;

Jamah 26. Aug 2010 13:05

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Delphi-Quellcode:
Procedure CreateEntry(const FileInfo: TIdFTPListItem); //TIdFTPListItem wird markiert als undeklarierter
begin                                                         //Bezeichner....

end;
Hm. Ich bekomm da wieder einen Error. Warum??

himitsu 26. Aug 2010 13:14

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von Jamah (Beitrag 1045214)
Hm. Ich bekomm da wieder einen Error. Warum??

Mit 'ner Architect in der Tasche hätt ich etwas mehr Ahnung erwartet. :shock:

Lösung: Du mußt die nötige Unit mit einbinden.

Tipp: (für D2009/D2010 ... geht auch schon früher, nur dann ein bissl anders)
- Strg+Shift+F
- Dateifilter "*.pas;*.inc"
- Verzeichnisse z.B. "C:\Programme\Embarcadero\RAD Studio\7.0"
- "Unterverzeichnisse durchsuchen" auf Ja
- und nun einfach mal nach "TIdFTPListItem" suchen
(die Punkte 2-4 merkt sich Delphi)

schöni 3. Sep 2010 19:58

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von jfheins (Beitrag 1044945)
Zitat:

Zitat von Jamah (Beitrag 1044916)
Woher kommt das GetFileInfo(), was du da benutzt? Ich hab einiges dazu gefunden, ist aber meißtens eine funktion zum Auslesen des Herstellers...

Das ist eine eigene Funktion, die dann auch das Icon ausliest und so. Solltest du ohne Probleme Weglassen können. (Dann halt direkt auf TIdFTP.DirectoryListing zugreifen)

Also den Code so ändern:
Delphi-Quellcode:
procedure TFtpBrowser.CreateDirectoryListing;
var
  i: Integer;
begin
    FFtp.SendCmd('TYPE A');

    FFtp.List (nil, '-a', True);

    for i := 0 to Pred (FFtp.ListResult.Count) do
      CreateItemFromFileInfo (FTP.DirectoryListing[i]);
end;

procedure TFtpBrowser.CreateItemFromFileInfo(const FileInfo: TIdFTPListItem);
var
  ListItem: TListItem;
begin
  // Mach was mit FileInfo
end;

Trotzdem hier noch der Code (bitte nicht schlagen^^)
Delphi-Quellcode:
type
 TFileInfo = record
    Directory: Boolean;
    Filename,
    Date,
    FileType: String;
    Size: Integer;
  end;

-------------------

function TFtpBrowser.GetFileInfo(Index: Integer): TFileInfo;
var
  Registry: TRegistry;
  Filename, Filedetails, TempType, TempSize: String;
begin
  Filename := FFtp.DirectoryListing[Index].FileName;
  Filedetails := FFtp.DirectoryListing[Index].Text;

  Result.Directory := Filedetails[1] = 'd';
  Result.Filename := Filename;

  if Result.Directory then
    Result.FileType := 'Ordner'
  else
  begin
    Result.FileType := ReverseString (copy (ReverseString (Filename), 1, pos ('.', ReverseString (Filename))));

    Registry := TRegistry.Create(KEY_READ);
    try
      Registry.RootKey := HKEY_CLASSES_ROOT;
      if Registry.OpenKey (Result.FileType, False) then
      begin
        TempType := Registry.ReadString('');
        Registry.CloseKey;
        if Registry.OpenKey (TempType, False) then
        begin
          TempType := Registry.ReadString('');
        end;
      end;
    finally
      Registry.Free;
    end;

    if (TempType = '') then
      Result.FileType := Trim (AnsiUpperCase (copy (Result.FileType, 2, length (Result.FileType) - 1)) + ' Datei')
    else
      Result.FileType := TempType;
  end;

  Filedetails := ReverseString(Filedetails);
  Delete (Filedetails, 1, length (Filename));

  Result.Date := ReverseString (Trim (copy (Filedetails, 1, 14)));

  try
    TempSize := Trim (copy (Filedetails, 14, 10)) + ' ';
    TempSize := Trim (copy (TempSize, 1, pos (' ', TempSize)));
    Result.Size := StrToInt (ReverseString (TempSize));
  except
    Result.Size := 0;
  end;
end;

Welche Aufgabe haben die Registryzugriffe in GetFileInfo im Zusammenhang mit FTP Zugang?

jfheins 3. Sep 2010 20:11

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Zitat:

Zitat von schöni (Beitrag 1047376)
Welche Aufgabe haben die Registryzugriffe in GetFileInfo im Zusammenhang mit FTP Zugang?

Das sorgt dafür, dass z.B. bei einer .bat Datei da steht "Windows Batch File" ;)

himitsu 3. Sep 2010 20:13

AW: IdFTP Dateien auflisten mit Zusatzinfos?
 
Das sucht aus der Registry, anhand der Dateiendung, die Beschreibung raus.
= das, welches im Exlorer in der Spalte "Typ" steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz