Problem mit Winexec und keine Lösung gefunden!



  • WinExec("**[**C:\\Test.exe",SW_SHOW);

    was mir mal als erstes auffällt ist die eckige klammer in der zeichenfolge für den pfad. ist das ein tipfehler hier in der post oder hast du die auch so in deinem prog. stehn.

    ansonsten bist du sicher das die test.exe auch auf c:\\ liegt?



  • Nein sie ist kein Tippfehler, habe es eins zu eins aus meinem Prog kopiert!

    Ja, liegt die exe, es liegt auch nicht daran das es eine verknüpfung ist, da ich es auch mit einer nicht verknüfung aus probiert habe..

    Masus



  • Edit(weiß nicht wie es hier im Forum geht):

    Es hat nun geklappt, ich weiß nicht wieso und so weiter, habe aber diesmal die eckige Klammer weggelassen und sofort das Prog ausführen lassen und es hat sofort funktioniert!

    Gruß Masus 😉



  • dann würde ich die klammer [ da mal rausmachen. könnte wunder bewirken 😉



  • wie kommst du auch darauf das dort ne eckige klammer hingehört. klammern haben generell am anfang nix in ner pfadangabe zu suchen.



  • Und ich würde mir mal Shellexecute, ShellexecuteEx und CreateProcess angucken, da WinExec nur noch wegen der Kompatibilität zu 16-Bit Programmen existiert.



  • Ok, danke für die vielen Antworten!
    Die eckige Klammer war bei jeder Quelle, die ich in anderen Foren gefunden habe dabei, weiß nicht wieso!

    Aber nun habe ich auch schon wieder ein neues Problem!

    Also ich wollte nun eine Datei, welche informationen zu dem ausgeführten Programm enthält, über den Starter bearbeiten können, dazu habe ich meinen Informatik lehrer gefragt, aber da dieser etwas verpeilt ist, hat er mir etwas anscheinend fehlerhaftes gegeben!
    Hier der QuellText:

    if (eingabe3==1){
    fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("Info.txt", ios::out);

    for(int i = 0; i < inhalt.lenght(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }

    Grüße Masus



  • Achja, die Fehlermeldung vergessen:

    'struct std::string' has no member named 'lenght'



  • Masus schrieb:

    Achja, die Fehlermeldung vergessen:

    'struct std::string' has no member named 'lenght'

    #include <string>



  • ich bezweifel das in anderen foren eine eckige klammer in der pfadangabe war.
    und naja englisch sollte man können. 😉

    length nicht ht sondern th.

    und warum schreibst du buchstabenweise in die datei?

    [EDIT]
    @theta
    hätte er die string.h nicht inkludiert, würde die fehlermeldung anderst lauten;-)

    @Masus
    ich denke nicht das dein Info. lehrer verpeilt ist, eher bist du es.... 🙄

    [und noch ein Edit]
    mit

    i < inhalt.lenght();
    

    verlierst du den letzten karakter in deiner zeichenfolge. richtig wäre

    i <= inhalt.lenght();
    


  • @LowFly:
    Nix da string.h - nur string - die Header in C++ sind ohne Endung!.



  • LowFly schrieb:

    [und noch ein Edit]
    mit

    i < inhalt.lenght();
    

    verlierst du den letzten karakter in deiner zeichenfolge. richtig wäre

    i <= inhalt.lenght();
    

    Nein, Kleiner ist an der Stelle schon richtig - Arrays in C und C++ sind null-basiert, d.h. das letzte Element ist bei Index "Länge-1".



  • @CStoll
    aber die länge einer zeichenfolge (ich weis das dies eine array ist) wird mir doch immer ohne die null terminierung zurück gegeben. siehe strlen()!

    oder hab ich da bisher was verpasst?



  • LowFly schrieb:

    @CStoll
    aber die länge einer zeichenfolge (ich weis das dies eine array ist) wird mir doch immer ohne die null terminierung zurück gegeben. siehe strlen()!

    oder hab ich da bisher was verpasst?

    Ja, size() bzw. length() gibt die Anzahl Zeichen ohne Null- Terminierung zurück. In einem std::string ist aber

    std::string s;
    char c = s[s.size()];
    

    nicht definiert. Es gibt ganz einfach keine Null- Terminierung.

    Nur bei der Member- Funktion c_str() ist ein Null-Terminierter C-String garantiert.



  • Also, da ich bisher nichts verstanden habe, wovon alle gesprochen haben, ausser das ich mich total doof verschrieben habe!
    Nun habe ich den blöden Tippfehler entfernt und es läuft, er ruft die entsprechende Datei nur eben nicht auf um sie zu ändern, Tipps?

    Quelldatei:
    fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("Info.txt", ios::out);

    for(int i = 0; i < inhalt.length(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }



  • fstream::open verlangt nach einer pfadangabe.

    wenn du schreibst

    datei.open("Info.txt", ...);
    

    MUSS die datei Info.txt im selben ordner liegen aus dem dein prog. gestartet wird.
    wenn das nicht der fall ist, findet fstearm deine datei nicht. wenn deine datei die du öffnen willst in einem anderen ordner bzw. laufwerk liegt, must du die pfadangabe anpassen.



  • Ok,
    habe nun nun einen Dateipfad angegeben, doch wenn ich nun die entsprechende Funktion ausführen will, tut sich nichts..

    Was muss ich noch ändern?

    [/cpp]fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("C:\\Users\\Max Hütten\\Desktop\\Minecraft\.minecraft\\Info.txt", ios::out);

    for(int i = 0; i < inhalt.length(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }



  • lies dir das mal bitte durch...
    http://msdn.microsoft.com/en-us/library/aa651613



  • Gar keine Ahnung was du mir damit sagen willst!

    Wie schon gesagt:

    <----Keine Ahnung!!!



  • Gar keine Ahnung was du mir damit sagen willst!

    das du selber mal dein gehirn anstrengen sollst.
    programmieren heist nachdenken und nicht das handtuch schmeisen und sich alles vorkauen lassen.

    unter dem link steht alles was du brauchst um eine neue datei zu erstellen, aus einer datei zu lesen in sie zu schreiben, oder text in einer beschriebenen datei anzuhängen.
    du willst in eine datei schreiben! öffnest aber die datei mit ios::out.
    mehr anhaltspunkte gibts jetzt nicht mehr. wenn du jetzt nicht in der lage bist deinen fehler selber zu finden hast du pech gehabt.

    programmieren geht auch nicht ohne try & error. fals dir das was sagt. und wenn dein englisch nicht so gut ist, zieh nen übersetzer zu hilfe.


Anmelden zum Antworten