Problem mit TSringList zu CStringPointer



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include <windows.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    // String Liste Ereugen
    TStringList *Liste = new TStringList();
    // Liste aus Datei laden
    Liste->LoadFromFile("Files.txt");
    // Ausgabe Schleife
    for ( int i=0; i < Liste->Count; i++)
    {   // AnsiString in c-String format Speichern
        char *ch = new char[Liste->Strings[i].Length()+1];
        strcpy(ch, Liste->Strings[i].c_str());
        // rar.exe aufrufen
        ShellExecute(0,"open","rar.exe","e -ad " + *ch[Liste->Strings[i].Length()],0,SW_SHOW);
    //Heap freigeben
    delete [] ch;
    }
    }
    //---------------------------------------------------------------------------
    

    also hier will ich wie man sieht auß einem TStringList object dateinamen entnehmen und diese mit ShellExecute dazu zu verwenden, winrar mit parametern auszuführen. ( Ich hab an die 150 files und die will ich nicht alle von hand entpacken ^^ bzw. nicht alle von hand rechts anklicken und dann entpacken in -> ( filename ))

    mein problem ist jetzt das *ch den string zwar übernimmt mir bei dieser weise allerdings nur das erste zeichen anzeigt. versuche ich *ch[...] zu schreiben sagt er mir

    [C++ Error] Unit1.cpp(22): E2062 Invalid indirection



  • Warum machen es sich die Leute immer so kompliziert?
    Wer hat bloß diese blöden Zeiger erfunden?

    Du kannst nicht (weder in C noch in C++) zwei Zeiger addieren (auch "e -ad " ist ein Zeiger).

    Also mach es dir einfach und benutze gleich die Methoden der AnsiString-Klasse:

    for(int i=0; i < Liste->Count; i++)
    {
      AnsiString sParams = "e -ad ";
      sParams += Liste->Strings[i];
      ShellExecute(0,"open","rar.exe", sParams.c_str(),0,SW_SHOW);
    }
    


  • danke 🙂
    übrigens ich bin auch eher für referenzen ^^ ( aber leide sind diese ja konstant 😉 )


Anmelden zum Antworten