GUI - Variable für CMD unter C++ Visual Studio 2010 einbauen
-
Hallo,
ich schreibe gerade in C++ einen Code in der GUI Programmierung.
Ich hab jetzt einen Befehl der in CMD ausgeführt werden soll.
Mein Problem ist jetzt, dass ich dort eine Variable einbauen muß, weil der Pfad den ich suchen will jedes mal ein anderer ist oder sein kann.
Bisher sieht er so aus:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int i; System::String^ pfad; fstream f; System::String^ suchPfad = this->textBox1->Text; i=system ("cd D:\\"); // Dateien suchen und in Textdatei schreiben i=system ("dir /S " + suchPfad + ">> D:\\Ausgabe.txt");
Mir geht es jetzt um die letzte Zeile im Code.
Wie kann ich die Variable suchPfad einfügen?
Denn so läuft es momentan nicht.Fehler:'system': Konvertierung des Parameters 1 von 'System::String ^' in 'const char *' nicht möglich
Ohne Variable kann ichs so hin bauen das das Programm läuft, aber mit schaff ichs nicht.
Danke schon mal für die Hilfe.
-
Das ist kein C++.
-
GUI Programmierung in Visual Studio 2010 C++
Da ich in C++ programmiere müssen die Befehle für CMD auch in dieser Sprache angepasst werden.
Beispiel: Befehl für CMD C:\ -> unter C++ ist es C:\\Bei dem Problem hast du mir damit jetzt nicht weiter helfen können...
-
Es sollte auch keine Hilfe bei Deinem Problem sein, sondern nur der Hinweis, dass Du eben nicht in C++ programmierst, auch wenn Du das behauptest. Aber offensichtlich ist dieser Hinweis bei Dir noch nicht angekommen. Also nochmal: Dein Beispiel ist kein gültiger C++-Code. Du programmierst eben nicht in C++.
Ganz abgesehen davon, um zumindest ein wenig auf Dein Problem einzugehen, macht es keinen Sinn, "cd" oder "dir" mit "system" aufzurufen. Egal in welcher Programmiersprache. Wenn Du den Inhalt eines Verzeichnisses lesen willst, bietet Deine gewählte Programmiersprache gewiss irgendwelche Funktionen dafür an. "system" ist in aller Regel die falsche Lösung.
-
Genauer gesagt handelt es sich um C++/CLI.
-
ich bins schrieb:
Es sollte auch keine Hilfe bei Deinem Problem sein, sondern nur der Hinweis, dass Du eben nicht in C++ programmierst, auch wenn Du das behauptest. Aber offensichtlich ist dieser Hinweis bei Dir noch nicht angekommen. Also nochmal: Dein Beispiel ist kein gültiger C++-Code. Du programmierst eben nicht in C++.
Ich schrieb doch schon das es GUI unter C++ Visual Studio 2010 ist.
Das es ein C++ Code ist hat doch gar keiner gesagt.ich bins schrieb:
Ganz abgesehen davon, um zumindest ein wenig auf Dein Problem einzugehen, macht es keinen Sinn, "cd" oder "dir" mit "system" aufzurufen. Egal in welcher Programmiersprache. Wenn Du den Inhalt eines Verzeichnisses lesen willst, bietet Deine gewählte Programmiersprache gewiss irgendwelche Funktionen dafür an. "system" ist in aller Regel die falsche Lösung.
Ich will es aber auf diese Art lösen.
Ohne eine Variable aber mit festee Pfadangabe bekomme ich das Programm zum laufen, es macht was es soll.
Und dann wird es auch machbar sein hier eine Variable reinzubringen.
Da gibt es bestimmt jemanden der das schon mal gemacht hat bzw. weiß wie es geht.Wenn Du nichts zur Problemlösung beitragen kannst dann brauchst Du hier auch nichts mehr posten, Du müllst nur das Forum voll.
-
yazzi2010 schrieb:
Ich schrieb doch schon das es GUI unter C++ Visual Studio 2010 ist.
Das es ein C++ Code ist hat doch gar keiner gesagt.Doch, hast du.
yazzi2010 schrieb:
ich schreibe gerade in C++
Die Sprache die du verwendest ist C++/CLI, eine Microsoftspezifischer Ableger von C++ [Der aber mit "C++" nur eine gewisse Schnittmenge teilt] (mit Windows 8 kommt der nächste Ableger C++/CX). Davon abgesehen empfiehlt sich die Verwendung von C++ nicht für UI-Design etc.
Siehe hierzu auch "Windows Forms und Visual C++ MACHT KEINEN SINN!"
yazzi2010 schrieb:
ich bins schrieb:
Ganz abgesehen davon, um zumindest ein wenig auf Dein Problem einzugehen, macht es keinen Sinn, "cd" oder "dir" mit "system" aufzurufen. Egal in welcher Programmiersprache. Wenn Du den Inhalt eines Verzeichnisses lesen willst, bietet Deine gewählte Programmiersprache gewiss irgendwelche Funktionen dafür an. "system" ist in aller Regel die falsche Lösung.
Ich will es aber auf diese Art lösen.
Wenn dir die Variante missfällt, wie man solche Probleme in Programmiersprachen eigentlich löst, musst du damit leben keine Antworten zu bekommen.
Du kannst aber wie bei Texten auch den String zusammensetzen (und damit auch Variablen verwenden), nur musst du auch mit Konvertierungen umgehen können. "System::String ^" ist ein C++/CLI-Typ, system ist ein C-Befehl, der nichts mit C++/CLI-Typen anfangen kann, sondern einen "const char *" verlangt.
Ich bin mir sicher das es den system-Befehl auch in .net gibt, dann wäre es wohl am leichtesten diesen zu verwenden.
yazzi2010 schrieb:
Wenn Du nichts zur Problemlösung beitragen kannst dann brauchst Du hier auch nichts mehr posten, Du müllst nur das Forum voll.
Man kann auch durch falsche Angaben, schlechte Forumlierungen (Es hat nichts mit der GUI zu tun) ebenso Posts erzeugen die nicht unbedingt einen Mehrwert erzeugen, zumal dein Post im falschen Unterforum ist, C++/CLI wäre das Richtige.
Vielleicht schiebt ein Moderator dies mal ins richtige Forum.
-
Lies ganz oben in deinem Beitrag, dort steht GUI unter C++ Visual Studio 2010.
Damit war das keine schlechte Formulierung finde ich.
Aber über diese Sache sollte hier nicht diskutiert werden.
Es geht um wichtigeres.
Ich werd mich bemühen das ich es allein gelöst bekomme wenn hier nicht wirklich jemand weiter helfen kann.
Denn bisher trugen die Sachen nicht zur Lösung bei.
-
Du
musst den .NET Typen String^ wie dir bereits geschrieben wurde in char* umwandeln.
-
yazzi2010 schrieb:
Lies ganz oben in deinem Beitrag, dort steht GUI unter C++ Visual Studio 2010.
Visual Studio unterstützt mehrere GUI-Frameworks (Teilweise direkt, teilweise durch zusätzliche Installationen/Bibliotheken), daher ist diese Aussage grundsätzlich ungeeignet.
yazzi2010 schrieb:
Denn bisher trugen die Sachen nicht zur Lösung bei.
Ich habe dir eine Antwort gegeben, und wenn du damit nichts anfangen kannst, dann können dir die meisten nicht weiterhelfen (Kaum einer programmiert ernsthaft in C++/CLI). inflames2k wiederholt meine Aussage noch einmal.
Falls du wirklich so verrückt bist C++/CLI zu programmieren, und bereit bist die Portokosten zu zahlen, hätte ich auch noch ein Buch abzugeben (Ich glaube dieses hier).
-
Danke inflames2k, ich habe was interessantes dazu im Internet gefunden und werde jetzt mal sehen ob ichs umsetzen kann.
-
Warum willst du es unbedingt ueber unschoene Hacks von String nach char* und system machen, wenn du auch eine saubere Variante ueber die Process-Klasse benuzten kannst?
http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.aspxSo kannst du sogar den Output der Kommandos umleiten falls du ihn spaeter weiterverarbeiten willst.
Aber auch ich empfehle dir fuer .NET-Programme C# (oder auch VB) anstatt C++/CLI zu verwenden. Es ist nur als Interop-Sprache fuer nativen zu managed Code gedacht, nicht als Primaersprache.
-
C# und VB ist für mich uninteressant, weil ich angefangen habe C++ zu lernen...und jetzt nicht mehr wechseln kann, weil die Prüfung auch bald bevor steht.
Trotzdem thanks.
-
Ich sage nicht, dass du die Programmiersprache wechseln sollst. Ich sage nur, dass C++/CLI fuer "normale" Programme keinen sinn macht. C++ und C++/CLI haben, wie bereits erwaehnt auch nicht wirklich viel gemein, deswegen wirst du es mit C++-Vorkenntnissen (also ISO-C++) nicht einfacher haben C++/CLI zu lernen und umgekehrt. Im Gegenteil, dein Versuch C++ (oder besser gesagt C) [
system
] und C++/CLI [System::String
] zu mischen zeigt ja gerade, dass man schnell durcheinander kommt.
Du kannst ISO-C++ ruhig weiter machen, aber fuer .NET empfiehlt es sich wirklich C# oder VB zu lernen. Und glaub mir, zusaetzlich eine Programmiersprache zu lernen klingt schlimmer als es ist. Wenn du einmal die C++-Basics hast, dann faellt das Lernen anderer Programmiersprachen gar nicht mal so schwer. C++ als Erstsprache hat von mir auch einiges an Zeit zum lernen gefordert; als ich VB als Zweitsprache gelernt hab hat das Lernen der Basics und grundlegenden Syntax gerade mal 2 Wochen in Anspruch genommen weil viele Konstrukte vertraut aussahen. Und ab dann wars eigentlich nur noch das lernen der Moeglichkeiten des .NET-Frameworks, was du ja durch deine C++/CLI-Erfahrung schon hast.Auf jeden Fall viel Erfolg weiterhin beim (richtigen
) C++
-
yazzi2010 schrieb:
C# und VB ist für mich uninteressant, weil ich angefangen habe C++ zu lernen...und jetzt nicht mehr wechseln kann, weil die Prüfung auch bald bevor steht.
Trotzdem thanks.Nein. Du hast nicht angefangen C++ zu lernen. Zumindest hast Du keinen C++ code gepostet. Es ist C++/CLI. Und behaupte jetzt nicht, du hättest nicht gesagt, du hättest angefangen C++ zu lernen.
Wenn ich auf Irrtümer in der Fragestellung aufmerksam mache, halte ich es für die Allgemeinheit durchaus interessant. Und wenn Du eine vorsichtig ausgedrückt "unglückliche" Lösung vorschlägst (Aufruf von "system") und darauf beharrst, diese weiter zu verwenden, dann frage ich mich meinerseits, ob das so hilfreich ist.
Besser wäre es, Du würdest auf die Kritik reagieren und beispielsweise fragen, wie man es denn eleganter lösen könnte, als mit "system". Ich kann Dir das nicht sagen, da ich kein C++/CLI kann, dafür aber C++.
Es gab übrigens mal ein Kommentar von Bjarne Stroustroup zu C++/CLI, wo er meint, dass es durchaus eine interessante Programmiersprache sein könnte, der Name aber sehr unglücklich gewählt wurde, da es eben kein C++ ist.
-
C++/CLI ist auch C++, steht doch im Namen drin
Ich habe mir bei Bekannten noch Hilfe geholt und es hinbekommen.
Meinen Code hab ich dann nach vielen Überlegungen in die GUI eingeschrieben, hatte dann zuerst viele viele Fehler.
Habe alle ab arbeiten können, aber bei einem Fehler komme ich jetzt nicht weiter.
Vielleicht kann mir ja da jetzt jemand weiter helfen?for(a=0; a<16; a=a+1){ if(aC[a].box == "1"){ System::String^ suchPfad = "dir /S \"" + this->textBox1->Text + aD[a].end + "\">> D:\\Ausgabe.txt";
Bei Zeile "System::String^......" bekomme ich den Fehler:
C2679: Binärer Operator '+': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
C2678 in der Zeile davor konnte ich beheben, bei diesem weiß ich jetzt keinen Rat.
Wer kann helfen?
-
yazzi2010 schrieb:
C++/CLI ist auch C++, steht doch im Namen drin
Njet. :p
yazzi2010 schrieb:
for(a=0; a<16; a=a+1){ if(aC[a].box == "1"){ System::String^ suchPfad = "dir /S \"" + this->textBox1->Text + aD[a].end + "\">> D:\\Ausgabe.txt";
aD ist ein Array von std::string's, nehme ich mal an?
Wobei C++/CLI glaube ich standardmaessig Unicode ist, probier falls obiges nicht zutrifft mal die Zeichenketten in der Unicode-FormL"Schtring"
zu schreiben.
-
yazzi2010 schrieb:
C++/CLI ist auch C++, steht doch im Namen drin
Auf zwei Seiten sagen dir zig verschiedene Leute, dass C++/CLI nicht gleich C++ ist. Und du glaubst das immer noch nicht und gibst so eine Antwort zurück?
Dann nehme ich an, ist C++, C# und C++/CLI auch C (C++/CLI sogar doppelt!), steht doch im Namen drin!
Und darf ich raten?
aD[a].end
resultiert in einemstd::string
? Da siehst du schon die Interop-Komponente von C++/CLI. Es gibtstd::string
undSystem::String^
und man kann die beiden nicht einfach ineinander überführen. Es hat keinen Sinn als Anfänger C++/CLI zu lernen!Grüssli
-
Danke Jonas,
ja aD ist ein Array von std::string.@Dravere
Das Problem welches ich vorher hatte. konnte ich auch mit Hilfe lösen.
Wenn ich das hin bekommen hab dann muß das jetzt auch irgendwie gehn^^
-
yazzi2010 schrieb:
@Dravere
Das Problem welches ich vorher hatte. konnte ich auch mit Hilfe lösen.
Wenn ich das hin bekommen hab dann muß das jetzt auch irgendwie gehn^^Ja, es geht. Mein Problem dabei ist, wenn ich dir die Lösung dazu gebe oder dich auf die Lösung hebe, dann haust du mit dieser ab und hast den zentralen Punkt in diesem Thread nicht verstanden. Und das sehe ich langfristig als grösseres Problem als dein aktuelles Problem mit der Konvertierung.
Wenn ich dir also in deinem kleinen Problem jetzt helfe, ohne dass ich sehe, dass du das grössere Problem verstanden hast, habe ich danach ein schlechtes Gewissen, weil ich das Gefühl hätte, dich falsch beraten zu haben.
Grüssli