c++ readFile komische Ausgabe
-
Hey
Ich habe folgendes Problem. Ich muss eine textdatei einlesen( mit readFile) und die einzelnen zeichend in einen char array speichern zur weiterverarbeitung. Habe in c++ noch nicht so viele erfahrungen und muss herlich zugeben, dass ich das was ich zu readFile im i net gefunden habe nicht alles hundert prozentig verstanden habe ;). Habe folgenden quelltext im i net gefunden und mal in mein projekt reinkopiert um zu schauen was passiert( habe eine textdatei mit dem namen data.txt angelegt eine 1 eingefügt und in den ordner mit meinem c++ projekt gespeichert. War soweit auch alles io nur die konsolenausgabe war dann eben keine 1 sondern eine zahlenfolge 52529....
Was ist da passiert und wie bekomme ich stattdessen die einzelnen zeichen als chars in ein array..so das danach auch wirklich die zeichen und nicht zahlenfolgen drinsteh?HANDLE hFile = CreateFile(TEXT("data.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
std::cout << "Datei konnte nicht geöffnet werden!" << std::endl;
return EXIT_FAILURE;
}// Dateigröße ermitteln
DWORD dwFileSize = GetFileSize(hFile, NULL);// Speicher für Buffer reservieren
LPTSTR pszBuffer = new TCHAR[dwFileSize + 1];// Datei auslesen
DWORD dwBytesRead = 0;
ReadFile(hFile, pszBuffer, dwFileSize, &dwBytesRead, NULL);
pszBuffer[dwBytesRead] = '\0';// Dateiinhalt ausgeben
int i = 0;
while( pszBuffer[i] != '\0')
{
cout << pszBuffer[i];
i++;}
// Datei schließen
CloseHandle(hFile);return EXIT_SUCCESS;
}LG Susi
-
Lies halt mal nur 1 Byte ein, anstatt das gesamte File.
btw: nutze die cpp-Tags
HANDLE hFile = CreateFile(TEXT("data.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) { std::cout << "Datei konnte nicht geöffnet werden!" << std::endl; return EXIT_FAILURE; } // Speicher für Buffer reservieren TCHAR pszBuffer[4]; // Datei auslesen DWORD dwBytesRead = 0; ReadFile(hFile, pszBuffer, 4, &dwBytesRead, NULL); pszBuffer[dwBytesRead] = '\0'; // Dateiinhalt ausgeben int i = 0; while( pszBuffer[i] != '\0') { cout << pszBuffer[i]; i++; } // Datei schließen CloseHandle(hFile); return EXIT_SUCCESS; }Ohne Garantie, aber in etwa in diese Richtung sollte es gehen.
Allerdings würde ich, wenn du sowieso mit der Standardbibliothek arbeiten kannst die auch gleich nutzen:
#include <iostream> #include <ifstream> int main () { int value = 0; std::ifstream in ("data.txt"); in >> value; std::cout << "Wert eingelesen: " << value << std::endl; }
-
Hey
Ok das ausgabe problem habe ich inzwischen gelöst..wird mir alles auf der konsole ausgegeben. Jetzt möchte ich das file aber stück für stück einlesen d.h. 5 zeichen in meinen buffer lesen und den buffer ausgeben..dann die nächsten 5 zeichen aus dem file in den buffer lesen ...usw. Die frage ist wo gebe ich das an das ich erst z.b. ab dem 5 zeichen im file das lesen des files starten will?LG
-