createprocess, kommandozeile, leerzeichen in der Pfadvariable



  • randell schrieb:

    Der "Short"-Pfad wird auch unbeabsichtigt in alle anderen CString-Membervariablen abgelegt die ich in diesem Projekt benutze.

    Meinst du jetzt, dass bereits ermittelte Pfade dann in Kurz-Form sind, oder werden eben nur danach neu ermittelte Pfadangaben in der Kurz-Form geliefert?! 😕



  • ich habe mehere stringvariablen in denen eigentlich erstmal gar nichts drinstehen sollte. Nachdem aber getshortpathname für die variable m_sInput1 ausgeführt wird, enthalten auf einmal alle stringvariablen den Pfad aus m_sShortInput1.

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

    m_sInput1 => "C:\Testfiles Input\file1"
    m_sShortInput1 => ""
    m_sInput2 => ""
    m_sInput3 => ""
    m_sOutput1 => ""
    ...
    nach GetShortPathName(m_sInput1, (LPTSTR)(LPCTSTR)m_sShortInput1,100);
    m_sShortInput1 => "C:\Testfi~1\file1"
    m_sInput1 => "C:\Testfi~1\file1"
    m_sInput2 => "C:\Testfi~1\file1"
    m_sInput3 => "C:\Testfi~1\file1"
    m_sOutput1 => "C:\Testfi~1\file1"
    ...



  • Dann nehme ich mal an, dass all diese Member-Variablen auf den selber Speicher-Bereich zeigen 🙄



  • Dann würde dass problem aber auch bei anderen operationen auftauchen, oder?
    Wenn ich mit .GetPathName arbeite bleiben die Speicherbereiche von den anderen Variablen ja auch leer.



  • 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