ReadFile
-
Du kannst doch einfach die Dateigröße mit GetFileSize/Ex ermitteln.
-
recht hast du
des tut auch seinen zweck.
trotzdem funkts irgendwie nicht.
mein code ist folgender:ReadFile(hFileHandle, buf, GetFileSize(hFileHandle), &Count, NULL);
jetzt hab ich einmal die größe von buf dynamisch mit der Größe des files angelegt und einmal gleich am anfang(ich weiss ja wie groß das file ist).
beides gibt komische sachen zurück. der string ist jedesmal länger als die größe der datei, obwohl durch ReadFile nur so viele bytes gelesen werden wie im File sind. an anderer stelle wird der buf nicht mehr verändert.
-
Ok, hier mal ein Beispiel. In dem Code den du gezeigt hast, hab ich keinen Fehler gefunden.
#include <windows.h> #include <iostream> int main() { // Datei öffnen 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 std::cout << pszBuffer; // Datei schließen CloseHandle(hFile); return EXIT_SUCCESS; }
-
ups, hab vergessen den Speicher für den Buffer wieder freizugeben.
-
sei dir verziehen
-
also.....
....na ich habs in C geschrieben, aber sollte ja an den api-aufrufen nix ändern.
ich glaub mein problem war dass ich den string nicht mehr "0-terminiert" hab.
danke dafür.
habs zwar in des file als string abgespeichert, aber des nimmt er wohl nicht mehr mit.
deswegen kann ich mir trotzdem nich so ganz erklären, was dann bei mir gelaufen ist.
egal....jetzt gehts.andere sache......wenn du dich schonmal so gut auskennst:
was ist die low-order bzw. high-order größe einer datei?
wie komm ich an einen file-pointer ran........
(zitat ms-hilfe: "the readfile function reads data from a file, starting at the position indicating by the file pointer." ist gleich der erste satz in der msdn für readline....bei writeline dasselbe)
bsp. ich will ab byte 50 lesen....klar könnte ich einfach die ersten 50 gelesenen bytes wieder vergessen, aber des kanns ja auch nicht sein.
(ausserdem kanns ja auch mal das 5000000 byte sein)
-
was ist die low-order bzw. high-order größe einer datei?
Die Funktion gibt nur einen DWORD zurück. Da man dort aber nur eine Dateigröße von 4 GB ablegen kann, gibt's noch einen extra Parameter für größere Dateien.
wie komm ich an einen file-pointer ran........
Mit SetFilePointer
-
gut dankeschön......
......man des is ja schlimmer wie java programmieren.
nutzt du eigentlich auch die ganzen win-tools.....so visual studio oder so was?
der eigentlich vorteil ist doch nur dass ich mir so fensterapplikationen wohl so ein bisschen zusammklicken kann oder? (ist des vielleicht so wie qt-designer).
weil ich hab dieses vs.net, aber irgendwie ist mir des viel zuviel stress, da pack ich lieber meinen emacs aus und los gehts.
also für konsolenanwendungen lohnts wahrscheinlich nicht, oder?und hast du schon erfahrungen mit dem c#-zeux gemacht?
-
*LOL*
-
Also wenn du Visual Studio .NET hast, dann probiers doch einfach aus und nimm dann was dir besser gefällt.
Bei der Visual C++ IDE ist ein Ressourceneditor dabei mit dem du Dialoge ziemlich einfach zusammenklicken kannst und die MFC die die WinAPI Funktionen in Klassen kapselt.und hast du schon erfahrungen mit dem c#-zeux gemacht?
Nein, das ist mir zu einfach.
:p