ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1482
1482
EMPFEHLEN
-
Hallo...
Ich möchte gerne eine ->belibig<- große datei einlesen lassen...
ich mach das volgendermaßen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
CHAR ReadBuffer[100]; DWORD dwBytesRead; HANDLE hFile; hFile = CreateFile("C:/test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) MessageBox(hWnd, (LPCSTR)GetLastError(), "Could not open file", MB_OK); if(ReadFile(hFile, ReadBuffer, 100, &dwBytesRead, NULL) == FALSE) { MessageBox(hWnd, (LPCSTR)GetLastError(), "Could not read from file", MB_OK); CloseHandle(hFile); } if (dwBytesRead > 0) { ReadBuffer[dwBytesRead]='\0'; // NULL character } else { MessageBox(hWnd, "error", "error", MB_OK); } CloseHandle(hFile);
jetzt hab ich aber nur 100 frei in ReadBuffer...
Jetzt dachte ich mir, ich kann doch mit GetFileSize, die größe der datei herrausfinden und erst DANN ReadBuffer Dekliniren...
Praktisch so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
DWORD dwBytesRead; DWORD FileSize; //new HANDLE hFile; hFile = CreateFile("C:/test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) MessageBox(hWnd, (LPCSTR)GetLastError(), "Could not open file", MB_OK); FileSize = GetFileSize(hFile, NULL); //new CHAR ReadBuffer[FileSize]; //new <- Zeile 177 if(ReadFile(hFile, ReadBuffer, FileSize, &dwBytesRead, NULL) == FALSE) { MessageBox(hWnd, (LPCSTR)GetLastError(), "Could not read from file", MB_OK); CloseHandle(hFile); } if (dwBytesRead > 0) { ReadBuffer[dwBytesRead]='\0'; // NULL character } else { MessageBox(hWnd, "error", "error", MB_OK); } CloseHandle(hFile);
aber da bekomm ich immer volgende Fehlermeldung:
Mach ich das i.wie falsch?(177) : error C2057: Konstanter Ausdruck erwartet
(177) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
(177) : error C2133: 'ReadBuffer': Unbekannte Größe
-
11.09.08 00:32 #2
- Registriert seit
- Sep 2007
- Beiträge
- 473
Du musst beim Array die Größe entweder direkt als Zahl oder eine Konstante angeben. Der Compiler muss wissen, wie groß das Array wird. Das kann er nicht, wenn erst zur Laufzeit die Größe bestimmt wird.
-
hm...wie soll ich das dann realisiren?
ich habs auch schon so probiert:
char *ReadBuffer;
und dann ReadBuffer = malloc(FileSize*sizeof(char));
-> dann bekomm ich den fehler hier: error C2440: '=': 'void *' kann nicht in 'char *' konvertiert werden
wobei das ja das gleiche macht wie CHAR ReadBuffer[FileSize];
Wie soll ich das dann am besten machen?Geändert von ed0x (11.09.08 um 00:50 Uhr)
-
11.09.08 00:56 #4
- Registriert seit
- Sep 2007
- Beiträge
- 473
Ja was hast du denn mit den Daten aus der Datei vor?
Du könntest z. B. ein char-array als Puffer nehmen, dann einfach sagen wir 100 Zeichen einlesen und das in eine Schleife packen. So kriegst du die ganze Datei.
Wenn du was brauchst, wo du die Daten ablegen kannst, dann kannst ja einen vector oder sowas in der Richtung benutzen. Sag uns mal, was du vorhast
.
-
äh..
ich will ne art datenbank einlesen die ich dann auswerte...
nur die können unterschiedlich groß sein...
-
11.09.08 01:58 #6
- Registriert seit
- Sep 2007
- Beiträge
- 473
Angenommen, deine Daten liegen in der Datei so vor:
Code :1 2
huhu wie gehts dir
Das heißt, pro Zeile ein Datensatz, die einzelnen Felder durch Leerzeichen getrennt.
Dann kannst du die z. B. so einlesen und dann auch entsprechend ausgeben:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include <iostream> #include <fstream> #include <vector> struct datensatz { char teil1[10]; char teil2[10]; }; int _tmain(int argc, _TCHAR* argv[]) { std::vector<datensatz> *Daten = new std::vector<datensatz>(); std::ifstream sr("c:\\test.txt", std::ifstream::in); while (sr.good()) { struct datensatz d; sr >> d.teil1 >> d.teil2; Daten->push_back(d); } std::cout << Daten->at(1).teil1 << std::endl; getchar(); return 0; }
Bitte nicht hauen, wenn ich da einen rechten Quatsch mache, ich hab mich nie sonderlich intensiv mit C++ beschäftigt. Zumindest gehts bei mir.
Ich hab vergessen, die Datei nach dem Einlesen wieder zu schließen...
EDIT: Jetzt seh ich grade, dass du ja die WinApi benutzen wolltest? Gibts dafür einen bestimmten Grund?Geändert von engelmarkus (11.09.08 um 02:07 Uhr)
-
also, volgendes:
ich hab mir schon ein solches programm geschreiben, nur in C++ Konsolenanwendung...
Jetzt wollt ich halt ne schöne GUI dazu machen...
Kann ich eigentlich das eingelesene aus der datei auch in einem String speichern?
Ähnliche Themen
-
WinApi Frage zu showWindow
Von roxX0r im Forum C/C++Antworten: 0Letzter Beitrag: 27.10.07, 00:03 -
Download per readfile()
Von TchiboMann im Forum PHPAntworten: 10Letzter Beitrag: 07.09.07, 00:19 -
Frage zum Tutorial (bzw. readfile ())
Von Rinejunky im Forum PHPAntworten: 6Letzter Beitrag: 23.10.05, 23:23 -
Problem readfile();
Von liquidbeats im Forum PHPAntworten: 7Letzter Beitrag: 21.08.05, 14:25 -
ReadFile Funktion
Von wasa im Forum VisualStudio & MFCAntworten: 6Letzter Beitrag: 24.07.04, 16:52





Zitieren
Login






