createprocess, kommandozeile, leerzeichen in der Pfadvariable



  • GetPathName 😕 Wie hast du denn deine ganzen Variablen definiert und initialisiert?!



  • Meine Variablen sind MFC CStringvariablen die im Public-Bereich einer Dialogfeldklasse definiert sind.
    hab die sache in diesem forum gepostet, da es sich bei createprocess ja eigentlich um eine winapi funktion handelte.

    Was mein problem angeht. ich hab nun in der Funktion

    GetShortPathName(m_sInput1, (LPTSTR)(LPCTSTR)m_sShortInput1,100);
    

    den parameter lpszShortPath:

    (LPTSTR)(LPCTSTR)m_sShortInput1
    

    durch eine TCHAR Variable ersetzt und dann hat alles funktioniert.

    anscheinend funktioniert das casten von CStrings auf diese weise wohl nicht immer, obwohl es z.B. bei createprocess funktioniert hat.

    trotzdem aber nochmal danke für die tipps.
    randell



  • sorry, noch eine Frage.

    Liege ich richtig, dass man mit GetShortPathName nur Datei-Pfade konvertieren kann, die wirklich auf der Platte schon existieren?

    Wie kann ich denn den Pfad einer Datei konvertieren, die ich über die Konsole erst erzeuge?



  • Erzeuge doch erst die Datei und ermittel dann den dazugehörigen Kurz-Namen - im Vorhinein kannst du den nicht bestimmen 😉



  • das ist ja gerade mein problem.
    das konsolenprogramm benötigt ja den konvertierten datei- bzw. pfadnamen um die datei erzeugen zu können.

    konsolenprogramm:
    anwendung.exe inputfile outputfile



  • Ich verstehe dein Problem nicht so ganz 🙄
    Wenn die Datei nicht existieren darf, dann kannst du ja eh nur kurze Dateinamen verwenden 😉



  • ich weiss nicht vielleicht hab ich ja auch dich falsch verstanden.

    warum ich die ganze sache mache:
    ich hab in MFC eine Oberfläche erstellt, die auf eine Konsolenanwendung aufsetzt. Die Konsolenanwendung rufe ich über die winapi createprocess auf, die die entsprechenden parameter als string an die Konsolenanwendung übergibt.

    Die Konsolenanwendung benötigt ein Inputfile(z.B. ein avi-file) und konvertiert dies in ein Outputfile(z.B. Mpeg).
    damit die konsolenanwendung weiss wohin u. in welchem format sie die datei speichern soll, muss ich ihr den pfad übergeben.

    Beispiel:

    anwendung.exe "C:\testfiles\test.avi" "C:\testfiles\test.mpeg"

    das ganze jetzt mit stringvariablen:

    anwendung.exe m_sInputfile m_sOutputfile

    das klappt solange keine leerzeichen im pfad auftauchen



  • Wandel doch einfach den Pfad der Input-Datei um, schneide den Dateinamen ab und setzt den Output-Filenamen dran 🙄



  • dazu müsste man voraussetzen, dass der benutzer das outputfile immer im gleichen ordner wie das inputfile speichern möchte.

    ich könnte den filename vom outputpfad abschneiden, dann getshortpathname ausführen und dann den filename wieder anhängen...wäre aber dann wirklich von hinten durch die brust ins auge...und das dann auch noch für 3 verschiedene Outputfiles.

    gibt es wirklich keine andere möglichkeit?



  • Irgendwie verstehe ich dein Problem absolut nicht - du übergibst einfach den langen Pfad an GetShortPathName (so wie ich das sehe musst du nicht unbedingt eine Datei angeben) und hängst dann einfach den Dateinamen an 😕



  • o.k. jetzt läufts.
    vielen dank für die hilfe


Anmelden zum Antworten