Delphi code nach CBuilder (Indy)



  • kann mir jemand den code nach BCB übersetzen? oder gibt es einen delphi2bcb translator? 😉

    procedure TFTPServer.IdFTPServer1ListDirectory( ASender: TIdFTPServerThread; const APath: string; ADirectoryListing: TIdFTPListItems ) ; 
    
      procedure AddlistItem( aDirectoryListing: TIdFTPListItems; Filename: string; ItemType: TIdDirItemType; size: int64; date: tdatetime ) ; 
      var 
        listitem: TIdFTPListItem; 
      begin 
        listitem := aDirectoryListing.Add; 
        listitem.ItemType := ItemType; 
        listitem.FileName := Filename; 
        listitem.OwnerName := 'anonymous'; 
        listitem.GroupName := 'all'; 
        listitem.OwnerPermissions := '---'; 
        listitem.GroupPermissions := '---'; 
        listitem.UserPermissions := '---'; 
        listitem.Size := size; 
        listitem.ModifiedDate := date; 
      end; 
    
    var 
      f: tsearchrec; 
      a: integer; 
    begin 
      ADirectoryListing.DirectoryName := apath; 
    
      a := FindFirst( TransLatePath( apath, ASender.HomeDir ) + '*.*', faAnyFile, f ) ; 
      while ( a = 0 ) do 
      begin 
        if ( f.Attr and faDirectory > 0 ) then 
          AddlistItem( ADirectoryListing, f.Name, ditDirectory, f.size, FileDateToDateTime( f.Time ) ) 
        else 
          AddlistItem( ADirectoryListing, f.Name, ditFile, f.size, FileDateToDateTime( f.Time ) ) ; 
        a := FindNext( f ) ; 
      end; 
    
      FindClose( f ) ; 
    end;
    


  • ich habe es gerade selber versucht und bin zu folgendem ergebniss gekommen.
    allerdings ohne was an:

    procedure AddlistItem( aDirectoryListing: TIdFTPListItems; Filename: string; ItemType: TIdDirItemType; size: int64; date: tdatetime ) ;

    zu machen. hier der code:

    void __fastcall TForm1::ftpListDirectory(
          TIdFTPServerThread *ASender, const AnsiString APath,
          TIdFTPListItems *ADirectoryListing)
    {
        TIdFTPListItem *listitem;
    
        listitem = aDirectoryListing->Add;
        listitem->ItemType = ItemType;
        listitem->FileName = Filename;
        listitem->OwnerName = "anonymous";
        listitem->GroupName = "all";
        listitem->OwnerPermissions = "---";
        listitem->GroupPermissions = "---";
        listitem->UserPermissions = "---";
        listitem->Size = size;
        listitem->ModifiedDate = date;
    
        tsearchrec f;
        int a;
    
        ADirectoryListing->DirectoryName = apath;
    
        a = FindFirst(TransLatePath(apath,ASender->HomeDir) + "*.*",faAnyFile,f);
        while(a = 0)
        {
            if(f.Attr && faDirectory > 0)
            {
                AddlistItem(ADirectoryListing,f.Name,ditDirectory,f.size,FileDateToDateTime(f.Time))
            }
            else
            {
                AddlistItem( ADirectoryListing, f.Name, ditFile, f.size, FileDateToDateTime( f.Time ) ) ;
                a := FindNext( f ) ;
            }
        }
        FindClose(f);
    }
    

    dies führt nun zu folgenden fehler 😞

    [C++ Fehler] Unit1.cpp(28): E2451 Undefiniertes Symbol 'aDirectoryListing'
    [C++ Fehler] Unit1.cpp(29): E2451 Undefiniertes Symbol 'ItemType'
    [C++ Fehler] Unit1.cpp(30): E2451 Undefiniertes Symbol 'Filename'
    [C++ Fehler] Unit1.cpp(36): E2451 Undefiniertes Symbol 'size'
    [C++ Fehler] Unit1.cpp(37): E2451 Undefiniertes Symbol 'date'
    [C++ Fehler] Unit1.cpp(40): E2451 Undefiniertes Symbol 'tsearchrec'
    [C++ Fehler] Unit1.cpp(40): E2379 In Anweisung fehlt ;
    [C++ Fehler] Unit1.cpp(43): E2451 Undefiniertes Symbol 'apath'
    [C++ Fehler] Unit1.cpp(45): E2268 Aufruf der undefinierten Funktion 'TransLatePath'
    [C++ Fehler] Unit1.cpp(45): E2451 Undefiniertes Symbol 'f'
    [C++ Warnung] Unit1.cpp(46): W8060 Möglicherweise inkorrekte Zuweisung
    [C++ Fehler] Unit1.cpp(50): E2268 Aufruf der undefinierten Funktion 'AddlistItem'
    [C++ Fehler] Unit1.cpp(51): E2379 In Anweisung fehlt ;
    [C++ Fehler] Unit1.cpp(55): E2188 Ausdruckssyntax
    [C++ Fehler] Unit1.cpp(58): E2285 Keine Übereinstimmung für 'FindClose(undefined)' gefunden
    [C++ Warnung] Unit1.cpp(59): W8004 'a' wurde ein Wert zugewiesen, der nie verwendet wird.



  • okay habe mir das nochmals genauer angeschaut. konnte nun 9 fehler beheben! 🙂
    nun weis ich aber nicht mehr weiter. 7 fehler gibt es noch. so sieht der aktuelle code aus:

    void __fastcall TForm1::ftpListDirectory(
          TIdFTPServerThread *ASender, const AnsiString APath,
          TIdFTPListItems *ADirectoryListing)
    {
        TSearchRec f;
        TDateTime date;
        TIdFTPListItem *listitem;
        TIdDirItemType ItemType;
        String Filename;
        __int64 size;
        int a;
    
        listitem = aDirectoryListing->Add;
        listitem->ItemType = ItemType;
        listitem->FileName = Filename;
        listitem->OwnerName = "anonymous";
        listitem->GroupName = "all";
        listitem->OwnerPermissions = "---";
        listitem->GroupPermissions = "---";
        listitem->UserPermissions = "---";
        listitem->Size = size;
        listitem->ModifiedDate = date;
        ADirectoryListing->DirectoryName = apath;
        a = FindFirst(TransLatePath(apath,ASender->HomeDir) + "*.*",faAnyFile,f);
        while(a == 0)
        {
            if(f.Attr && faDirectory > 0)
            {
                AddlistItem(ADirectoryListing,f.Name,ditDirectory,f.size,FileDateToDateTime(f.Time))
            }
            else
            {
                AddlistItem( ADirectoryListing, f.Name, ditFile, f.size, FileDateToDateTime( f.Time ) ) ;
                a = FindNext(f);
            }
        }
        FindClose(f);
    }
    

    die fehler:

    [C++ Fehler] Unit1.cpp(35): E2451 Undefiniertes Symbol 'aDirectoryListing'
    [C++ Fehler] Unit1.cpp(49): E2451 Undefiniertes Symbol 'apath'
    [C++ Fehler] Unit1.cpp(51): E2268 Aufruf der undefinierten Funktion 'TransLatePath'
    [C++ Fehler] Unit1.cpp(56): E2268 Aufruf der undefinierten Funktion 'AddlistItem'
    [C++ Fehler] Unit1.cpp(56): E2316 'size' ist kein Element von 'TSearchRec'
    [C++ Fehler] Unit1.cpp(57): E2379 In Anweisung fehlt ;
    [C++ Fehler] Unit1.cpp(60): E2316 'size' ist kein Element von 'TSearchRec'



  • void __fastcall TForm1::ftpListDirectory(
          TIdFTPServerThread *ASender, const AnsiString APath,
          TIdFTPListItems *ADirectoryListing)
    

    rechtschreibung achten Case Sensitive

    APath != apath

    AddlistItem(ADirectoryListing,f.Name,ditDirectory,f.size,FileDateToDateTime(f.Time))
    

    semicolon einbaun

    🙄 so spontan gesehn

    imho hast du noch übersehen das da ne Funktion AddListItem deklariert wurde in dem delphi code

    [ Dieser Beitrag wurde am 23.04.2003 um 09:19 Uhr von 1ntrud0r editiert. ]



  • Hi,
    1. Fehler: [cpp]listitem = ADirectoryListing->Add;[/cpp]

    2. Fehler: [cpp] ADirectoryListing->DirectoryName = APath;
    a = FindFirst(TransLatePath(APath,ASender->HomeDir) + ".",faAnyFile,f);[/cpp]

    4. Fehler: vielleicht ist es besser(verständlich) den Delphi-Code so zuschreiben:

    procedure AddlistItem( aDirectoryListing: TIdFTPListItems; Filename: string; ItemType: TIdDirItemType; size: int64; date: tdatetime ) ; 
      var 
        listitem: TIdFTPListItem; 
      begin 
        ...
      end; 
    
    procedure TFTPServer.IdFTPServer1ListDirectory( ASender: TIdFTPServerThread; const APath: string; ADirectoryListing: TIdFTPListItems ) ; 
    var 
      f: tsearchrec; 
      a: integer; 
    begin 
      ADirectoryListing.DirectoryName := apath; 
      ...
    end;
    

    Na fällt dir jetzt auf, dass das 2 Funktionen sind?

    5. Fehler & 6. Fehler: [cpp]AddlistItem(ADirectoryListing,f.Name,ditDirectory,f.Size,FileDateToDateTime(f.Time));[/cpp]
    (BCB-Hilfe - Suchbegriff TSearchRec - Size)

    7. Fehler == 5. Fehler - Size

    zum 3. Fehler kann ich dir leider nichts sagen!

    MFG

    Alexander Sulfrian

    [ Dieser Beitrag wurde am 23.04.2003 um 10:43 Uhr von Alexander Sulfrian editiert. ]



  • hallo

    das mit a und A ist mir auch aufgefallen doch ihr werdet gleich sehen das dies wohl so sein muss. das mit size Size habe ich gestern noh gesehen nachdem ich mir mal subs angesehen habe.

    gut, ich habe den code nun wie folgt:

    void AddlistItem(TIdFTPListItems *aDirectoryListing, String Filename, TIdDirItemType ItemType, __int64 size, TDateTime date)
    {
        TIdFTPListItem *listitem;
        listitem = aDirectoryListing->Add;
        listitem->ItemType = ItemType;
        listitem->FileName = Filename;
        listitem->OwnerName = "anonymous";
        listitem->GroupName = "all";
        listitem->OwnerPermissions = "---";
        listitem->GroupPermissions = "---";
        listitem->UserPermissions = "---";
        listitem->Size = size;
        listitem->ModifiedDate = date;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ftpListDirectory(
          TIdFTPServerThread *ASender, const AnsiString APath,
          TIdFTPListItems *ADirectoryListing)
    {
        TSearchRec f;
        TDateTime date;
        TIdFTPListItem *listitem;
        TIdDirItemType ItemType;
        String Filename;
        __int64 size;
        int a;
    
        ADirectoryListing->DirectoryName = APath;
        a = FindFirst((APath,ASender->HomeDir) + "*.*",faAnyFile,f);
        while(a == 0)
        {
            if(f.Attr && faDirectory > 0)
            {
                AddlistItem(ADirectoryListing,f.Name,ditDirectory,f.Size,FileDateToDateTime(f.Time));
            }
            else
            {
                AddlistItem(ADirectoryListing, f.Name, ditFile, f.Size, FileDateToDateTime(f.Time));
                a = FindNext(f);
            }
        }
        FindClose(f);
    }
    

    ich glaub ich aheb alles original übersetzt. das einzige was ich entfernt habe ist "TransLatePath".

    nun habe ich nur noch einen fehler der an zeile:

    listitem = aDirectoryListing->Add;

    auftritt.

    fehler: [C++ Fehler] Unit1.cpp(25): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden



  • Hi,
    wie werden Funktionen in C++ aufgerufen? Was ist das Zeichen für eine Funktion?

    Richtig: ()

    -> listitem = aDirectoryListing->Add();
    vielleicht so?

    MFG

    Alexander Sulfrian



  • ooooooooops. haste recht 🙂 hab ich völlig übersehen.
    nun ja, leider funktioniert das listen nicht. compilierbar ist das program nun zwar, aber ich kann trotzdem keine files listen.

    ich gebe es auf. oder hat jemand lust mir zu helfen? was ich versuche ist, mit der indy9 ftpserver componente das listen von files hin zu bekommen. wenn ich also mit einem ftp client zum indy server connecte, werden keine files gelistet sowie keine ordner. ich habe gehofft das mir dieser code hilft. denke in delphi würde er sicher tun, übersetzt wie er jetzt ist hald wohl nicht, oder ich übersehe ne klenigkeit. 😞

    oder weis jemand eine andere gute kostenlose ftp componente ausser ICS?
    oder ein BCB beispiel mit indy ftpserver? auf der homepage gibts zwar demos, leider ist nur ein client und kein server beispiel dabei. 😞 😞 😞


Anmelden zum Antworten