Lesen einer Text-Datei w/ WIN32
Ich versuche zu analysieren, eine text-Datei mit einer win32-Anwendung in c++. Gibt es eine einfache Methode zum Lesen einer text-Datei Zeile für Zeile? Meine text-Datei besteht aus strings, die ich speichern möchten, in ein char-array(const char* cArray[67]). Hier ist was ich habe, so weit. Ich bin mit CreateFile und ReadFile. Ich bekomme eine Zugriffsverletzung(0x000003e6) von readfile:
CDECK::CDECK():filename(".\\Deck/list.txt")
{
LPVOID data = NULL;
hFile = CreateFileA(filename, GENERIC_READ,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
MessageBox(NULL, L"Failed to CreateFile - 'hFile'", L"CDECK::CDECK()", MB_OK);
DWORD fileSize = GetFileSize(hFile, &fileSize);
DWORD read = -1;
if(!ReadFile(hFile, data, fileSize, &read, NULL))
{
DWORD err = GetLastError();
MessageBox(NULL, L"Failed to ReadFile - 'hFile'", L"CDECK::CDECK()", MB_OK);
}
return;
}
- Schade, dass du nicht so etwas wie Python für diese.....
- Haben Sie verwenden, um winapi-Aufrufe direkt? Können Sie
std::ifstream
zum Lesen der Daten und speichern die Ergebnisse in einerstd::vector<std::string>
? - Es ist unglaublich, die Verrenkungen, die die Win32-API geht in einfache Aufgaben schwer. Versuchen Sie, dass in plain old C++; einfach. Python, Ruby, Perl... einfach, einfach, einfach. Sogar die gute alte C ist auch nicht so schlimm, wenn man weiß, was man tut. Aber layer in der Windows-API, und du bist plötzlich schoss durch ein Wurmloch der Borg Bauch.
- win32-Schnittstelle ist so ziemlich identisch zu C öffnen/Lesen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja:
Betrachten Sie diesen code:
Hier
data
null ist, und das folgende argument ist die Größe der gesamten Datei. Sie sollen keinen Puffer zuweisen, und dann übergeben Sie einen Zeiger auf eine solche Puffer und seine Größe, um es. Es ist, wo dieReadFile
Funktion schreiben der gelesenen bytes.Hier ist ein einfacher Weg, um es an die Arbeit mit statisch dimensionierten Puffer:
Dein problem ist, dass Sie Lesen die bytes der Datei, Lesen der Zeichenfolge, die Sie brauchen, um alloc ein string-Standort mit SysAllocStringByteLen und dann verwenden Sie die ReadFile
SysAllocStringByteLen
aus?SysAllocstringByteLen
) werden ausschließlich für die COM/OLE-code, gibt es keinen Vorteil für Sie anders. ReadFile ist glücklich mit einem Puffer. Die einfachste iststd::string
.Haben Sie vergessen, reservieren Sie einen Puffer vor dem Lesen Ihre Daten :
LPVOID data = NULL;
Bevor Sie weiterlesen, müssen Sie zuweisen eine Größe Pufferspeicher :
data = malloc(fileSize);
Und muss wohl auch erklären, Ihre Daten variable als char* anstelle von void*