Zeilenumbruch unter Windows, Char-Arrays zusammenfügen [gelöst]
-
Guten Morgen,
ich möchte mit c++ eine batch-Datei mit variablen Inhalten erstellen.
Momentan mache ich es so:
- Variable belegen
char Dateitext1[999]; sprintf(Dateitext1, "@echo off\n\tif exist \\server1\log\drucker\fertig\%computername%_%username%.txt goto ende\n\n:step1\n\tif /i %username%==");
- In Datei schreiben
fstream File("Person.dat", ios::out|ios::binary); if (File.is_open()) { // Aktuelle Person in der Datei speichern. File.write((const char*)&Dateitext1, 999); File.close(); // Datei schließen }
- Ausgabe
@echo off if exist \\palme\log\drucker\fertig\ omputername%_%username%.txt goto ende :step1 if /i %username%==
1.) Anmerkung: Genauso, wie die Ausgabe hier dargestellt wird, soll es aussehen, bei mir schreibt er aber leider alles hintereinander in eine Zeile und nimmt für \n sonen Kasten-Zeichen anstatt die Zeile umzubrechen.
2.) Bei "\%computername" fehlt durch das "\-Problem" das "%c".
3.) Wie kann ich jetzt an diesen char meinen char Username "hintenranhängen"???
thx, MFG
dope_dope
-
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
a)Zeilenumbrüche in den Systemen http://www.marquardtnet.info/cecke/quickies.1/1_quicky_27.html
b)char zusammenhängen = strcat
c) Siehe in der Hilfe unter Escape-Sequenzen nach
-
Hallo
moeglicherweise mit "\" statt mit "\"
MfG
Klaus
-
Zu
1.) Hab jetzt \r\n genommen -> klappt prima! thx!
3.) strcat() hat geholfen! thx!Leider klappt es mit 2.) immer noch nicht, hat jemand eine Idee??
-
Christian211 schrieb:
a)Zeilenumbrüche in den Systemen http://www.marquardtnet.info/cecke/quickies.1/1_quicky_27.html
Schon gut, aber besser wäre, die Datei einfach nicht binär zu öffnen. Dann klappts auch mit den Zeilenumbrüchen.
zu 2)
Backslashes leiten Escape-Sequenzen ein. Deshalb gibt \n auch einen Zeilenumbruch aus und keinen Dateinamen. Ein tatsächlicher Backslash wird mit \\ ausgegeben. Fazit: Alle Backslashes, die nicht zu Escape-Sequenzen gehören, verdoppeln.
-
Vermutung: Wenn ich vor % \\ setze dann denkt er er soll mir da ne variable reinschreiben von wegen %s und so....
-
%% auch verdoppeln
Aber bitte unterscheiden: Ersteres (das mit den Backslashes) macht der Compiler bei der Übersetzung, ein String wie "ab\nc" besteht danach nur noch aus 4 Zeichen { 'a', 'b', Newline, 'c' } plus angehängtem Nullbyte. Das '%' wird dagegen erst zur Laufzeit von diversen Funktionen wie der printf- und scanf-Familie interpretiert.
Eine Möglichkeit, dieses Problem zu umgehen, ist, hier auf sprintf zu verzichten. Zumal du diese Funktion überhaupt nicht brauchst, du formatierst ja gar nichts, du kopierst nur in einen String, dazu gibts aber strcpy.
Die sprintf-Zeile wär so also besser:
strcpy(Dateitext1, "@echo off\n\tif exist \\\\server1\\log\\drucker\\fertig\\%computername%_%username%.txt goto ende\n\n:step1\n\tif /i %username%==");
-
Habe es angepasst und das %%-Problem ist auch gelöst (\\%computername)! THX
-
man könnte auch die alten C-Routinen beiseite lassen und mit C++ arbeiten, sprich in etwa folgendes:
std::string Dateitext; Dateitext = "@echo off\n" += "\tif exist \\\\server1\\log\\drucker\\fertig\\%computername%_%username%.txt goto ende\n\n" += ":step1\n" += "\tif /i %username%=="; std::ofstream File("Person.dat"); if (File.is_open()) { // Aktuelle Person in der Datei speichern. File << Dateitext1; File.close(); // Datei schließen }