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
)