String auf Unicode überprüfen ?



  • Warum willst du dafür überhaupt Batchdateien verwenden?



  • Ich verwende das schon seit 2006 so und es erschien mir doch am einfachsten.
    Es laufen auch noch andere sachen in ner batch nicht nur lame.

    Und für die anderen sachen hätte ich zum beispiel keine DLL die ich importieren könnte und deshalb mache ich alles in ner batch.

    Das finde ich nicht weiter tragisch und mein Programm ist dann die GUI dazu.

    gibts denn noch nen anderen weg ausser dll import oder batch ?



  • SchnatterEnte schrieb:

    gibts denn noch nen anderen weg ausser dll import oder batch ?

    Selbstverständlich. Unter Windows wäre das CreateProcess().

    Ehrlich mal, es wäre wirklich hilfreich, wenn du direkt sagst, was du machen willst, und dir nicht alle Details aus der Nase ziehen läßt. Etwa so:

    "Hey, ich will den LAME-Encoder aufrufen. Dazu benutze ich Batchdateien; die unterstützen aber kein Unicode. Nun will ich Unicode-Dateinamen ausschließen, aber FileExists() scheint es egal zu sein, ob eine Datei einen Unicode-Dateinamen hat. Deshalb will ich's jetzt selber herausfinden. Wie mache ich das für einen String?"

    Und schon wäre es ein Leichtes gewesen, dich auf den Fehler am Anfang der Kausalkette (die Entscheidung für Batchdateien) hinzuweisen.



  • also du sagst mit CreateProcess() soll das gehen ?
    naja so ein bisschen erfahrung habe ich damit schon mit CreateProcess()
    nur kann ich mir das damit gar nicht so recht vorstellen ?

    Meinste es lohnt mal nen Prozess mit lame.exe + Parameter und ner File zu starten ?



  • hi,

    kann ich mit CreateProcess() auch Stapelverarbeiung machen also so das er nacheinander bestimmte dinge tut, oder muss ich immer wieder einen eigenen seperaten Prozess für jede Sache starten starten ?



  • SchnatterEnte schrieb:

    oder muss ich immer wieder einen eigenen seperaten Prozess für jede Sache starten starten ?

    Ja. Genau das passiert auch bei der Batchdatei. Jetzt bist du die Batchdatei.



  • Hallo,

    habe seit einiger Zeit nun mein gesamtes Programm umgeschrieben sodaß ich mit CreateProcess() statt ner batchfile arbeite.

    Das es trotzdem mit den UnicodeDateinamen nicht so ganz funktioniert sei erstmal dahingestellt. Unterschiede gibts auch schon bei FAT-32 und NTFS.

    AAABER:

    Ich übergebe an die Funktion CreateProcess() eine bestimmte Befehlszeichenkette die dann auch nacheinander abgearbeitet wird ohne CreateProcess() jedesmal neu zu starten also alles in einem Process. (um mehrmaliges öffnen des CMD-Fensters zu verhindern)

    Das Problem welches jetzt aber auftaucht ist sobald die Befehlszeichenkette länger als 13482 Zeichen ist wird nix mehr verarbeitet das CMD-Fenster blitzt nur kurz auf und das wars.

    Lässt sich daran irgendwie etwas ändern ?



  • SchnatterEnte schrieb:

    Das Problem welches jetzt aber auftaucht ist sobald die Befehlszeichenkette länger als 13482 Zeichen ist wird nix mehr verarbeitet das CMD-Fenster blitzt nur kurz auf und das wars.

    😮

    Wozu braucht man derart lange Kommandozeilenargumente?

    Jedenfalls vermute ich, daß du beide Probleme (Unicode-Dateinamen und Längenbeschränkung der Befehlszeile) lösen kannst, indem du die Unicode-Version von CreateProcess(), also CreateProcessW(), verwendest. Natürlich mußt du darauf achten, daß du die Dateinamen auch nur mit unicode-fähigen Klassen und Funktionen behandelst; in C++Builder-Releases vor 2009 schließt das alles in der Delphi-RTL und der VCL aus. D.h., du mußt AnsiString und std::string meiden und stattdessen WideString oder std::wstring benutzen; auch muß sämtliche Interaktion mit dem Dateisystem über die mit 'W' suffizierten Windows-API-Funktionen vonstatten gehen.

    Je nachdem, was dein Programm so macht, könnte dir ein Upgrade auf eine zeitgemäße C++Builder-Version viel ersparen.



  • Leider verwende ich schon die CreateProcessW() Funktion.
    Fast alles in meinem Programm ist Unicode fähig.

    Der CMD ist nicht Unicodefähig.

    Das mit der länge der Zeichenkette ergab sich eben aus nen haufen Dateien und deren Pfade und dem Flac Codec. Da hatte ich auf einmal soviel davon das die länge der Zeichenkette so bei 18000 war und es dann irgendwie nicht mehr funktionierte und ich dem auf dem Grund ging.

    Bei der lame.exe kommmt noch mit hinzu das ich die OutputDir mit angeben muss ohne diese angabe wird aus "test.wav" ein "test.wav.mp3", ich brauche aber "test.mp3".

    Schon alleine deshalb wird die Zeichenkette so extrem lang, bei Flac und Ape ist das nicht so. In der lame hilfe habe ich dazu nix gefunden.



  • kleine Korrektur.

    Leider verwende ich schon die CreateProcessW() Funktion.
    Fast alles in meinem Programm ist Unicode fähig.

    Der CMD ist nicht Unicodefähig.

    Das mit der länge der Zeichenkette ergab sich eben aus nen haufen Dateien und deren Pfade und dem Lame Codec. Da hatte ich auf einmal soviel davon das die länge der Zeichenkette so bei 18000 war und es dann irgendwie nicht mehr funktionierte und ich dem auf dem Grund ging.

    Bei der lame.exe kommmt noch mit hinzu das ich die OutputDir + Filename mit angeben muss ohne diese angabe wird aus "test.wav" ein "test.wav.mp3", ich brauche aber "test.mp3". Auch bei APE ist die Angabe einer OutputDir + Filename zwingend erforderlich. Schon alleine deshalb wird die Zeichenkette so extrem lang, nur bei Flac ist das nicht so. In der lame hilfe habe ich dazu nix gefunden.


Anmelden zum Antworten