Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

AW: IdFTP Dateien auflisten mit Zusatzinfos?

  Alt 25. Aug 2010, 17:16
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;
  Mit Zitat antworten Zitat