ReadFile - Wie bekomme ich CHAR in LPCTSTR ?
-
Hallo Leute
ich habe ein Problem was die Umwandlung betrifft. Ich sitze wahrscheinlich einfach schon zu lange vorm Computer und seh vor lauter Codezeile den Code nicht mehr...
Also, es geht um folgendes: Ich lese eine 3-zeilige Textdatei in den Puffer und möchte daraus 3 Variablen füllen. Aber ich kriegs einfach nicht hin, dass ich die Werte aus dem Puffer in die Variablen füllen kann. Wie lese ich die Werte, die in CHAR sind, aus und fülle sie in die Variablen, welche LPCTSTR sind, ein.
LPCTSTR Datei1; // Zeile 1 von Textdatei LPCTSTR Datei2; // Zeile 2 von Textdatei int Interval; // Zeile 3 von Textdatei char hBuf[4096]; CreateFile(L"\\Config.txt",etc.....); SetFilePointer(hFile,0,NULL,FILE_BEGIN); ReadFile(hFile,hBuf,4096,&hBytes,NULL); CloseHandle(hFile); /* Wie krieg ich nun den hBuf in Pfad1, Pfad2 und Interval ? */ CopyFile(Pfad1,Pfad2,false);
Ich bitte euch dringend um Hilfe, diese Ding sollte noch vor Ende der Ostern laufen...
Gruss Fabian
-
afaik sind LPCTSTR doch konstante Variablen...
probiers mal mit LPSTR
-
Der Befehl "CopyFile()", für welchen ich die beiden Variablen benötige, erwartet LPCTSTR, deswegen ist das so...
Ich programmiere erst seit 2 Tage mit C++ (also eigentlich eMbedded C++) und verstehe das ganze mit den diversen Datentype eh noch nicht so ganz. Ich komme aus einer anderen Ecke des Programmierens, deswegen ist C++ für mich doch noch ziemlich undurchsichtig... So weit so gut...
Ich stehe eben bereits da an, dass ich überhaupt nicht weiss, wie ich den nun den Puffer, den ich aus der Textdatei gelesen habe, verarbeiten muss.
-
Entweder du verwendest C++ Funktionen/Klassen (Stichwort: Stream-Klassen) oder,
du verwendest wie zur Zeit die Windows-API.
Für WinAPI gibts ein eigenes Forum versuchs mal dort.
-
Mir geht es ja in erste Linie eigentlich nur darum, die CHAR Variable auf zwei LPCTSTR und eine INT Variable zu verteilen. Aber ich habe keinen blassen Schimmer, wie das geht.
Ich denke dieses Problem hat schon direkt etwas mit C++ zu tun, deshalb bin ich in diesem Forum.
-
FainTheBrain schrieb:
Der Befehl "CopyFile()", für welchen ich die beiden Variablen benötige, erwartet LPCTSTR, deswegen ist das so...
Das ist aber keine Begründung, denn ein foo kann jederzeit vom Compiler implizit in ein const foo umgewandelt werden.
Ausserdem solltest du wissen, dass in WinAPI ein Zeichen vom Typ TCHAR ist, deshalb auch LPCTSTR. TCHAR ist abhängig von Unicode Kompilierung entweder char oder wchar_t. Es gibt daher bei den meisten Funktionen mit String Argumenten eine ...A Version (ANSI) und eine ...W Version (Wide - Unicode). In den entsprechenden Header Dateien wird dann per #ifdef aus fooA und fooW ein foo. Das foo wird dann idR auch vom Anwender benutzt. Man muss aber einige Sachen dabei beachten. Folgendes ist deshalb nicht sauber
CreateFile(L"\\Config.txt",etc.....);
Das funktioniert nur bei Unicode Kompilierung und ist deshalb unbrauchbar. Richtig sieht sowas wie folgt aus
// reine ANSI Version CreateFileA("\\Config.txt",etc.....); // reine Unicode Version CreateFileW(L"\\Config.txt",etc.....); // compile-abhängige ANSI/Unicode Version CreateFile(TEXT("\\Config.txt"),etc.....); // alternative ANSI/Unicode Version -> <tchar.h> wird gebraucht CreateFile(_T("\\Config.txt"),etc.....);
-
Danke groovemaster, soweit hab ich eigentlich verstanden was mir geschriben hast.
Nur für mein eigentliches Problem "einen CHAR auf 3 Variablen verteilen" habe ich leider damit immer noch keine Lösung.
-
So wie ich das sehe, suchst du wohl nach einer Funktion mit der man zeilenweise lesen kann. Keine Ahnung, ob WinAPI dazu was hat. In C++ gibt es da zB getline.
Für Konvertierungen, zB String nach int, gibts, wie bereits erwähnt, diverse Stream Klassen. Dazu gibts auch was in den FAQs.
-
Nein, nein, es muss nicht unbedingt zeilenweise sein... Von mir aus kann ich die gelesenen Zeichen auch einzeln - in einer Schleife - abarbeiten... Aber das Problem ist, dass ich nicht einmal diese Schleife hinbekomme...
-
Help, please!
-
Wenn du das mit einer Schleife machen willst, dann musst du halt solange Zeichen vom Quell- zum Ziel-Buffer kopieren, bis eine Zeilenendekennung vorliegt. Unter Windows wäre das dann CR LF.
Aber wie gesagt, wozu alles manuell machen, wenn's dafür schon Funktionen gibt.