Dateigröße in Byte auslesen
-
Hallo,
schaut euch mal die beiden Routinen an, und sagt mir wo der Fehler liegt.
Bei der ersten Routine kommt eine Dateigröße von 6304676 Byte heraus.
Legende:
asSuchString = c:\Musterpfad\.
asQuellFile = Musterdatei.txtAnsiString PfadName; Quelle = asSuchString; PfadName = asQuellFile; char *ch2 = new char [PfadName.Length() + 1]; strcpy(ch2, PfadName.c_str()); int handle1 = open(ch2, O_CREAT); DateiGroesse = filelength(handle1); delete [] ch2; close(handle1);Bei der zweiten Routine kommt eine Dateigröße von 3081488 Byte heraus.
char *ch1 = new char [asQuellFile.Length() +1]; strcpy(ch1, asQuellFile.c_str()); int handle = FileOpen(ch1, fmOpenRead); int iFileLength = FileSeek(handle,0,2); delete [] ch1; FileClose (handle);Die eigentliche Dateigröße liegt aber bei 130000 Byte.
mfg
-
-
Hallo,
da mein Projekt in ferner Zukunft evtl. auch auf Linux laufen soll, möchte ich nach Möglichkeit neutral bleiben. (also keine WINAPI-Funktion)
Gigt es hier auch Möglichkeiten ??mfg
Traugott
-
Hallo
da mein Projekt in ferner Zukunft evtl. auch auf Linux laufen soll
Und arbeitest du mit dem Builder? Hoffentlich reine Konsole ohne VCL...
Ansonsten schau im C++ Forum nach, da kannst du std::ifstream oder gar boost::filesystem anstelle der alten C-Sachen benutzen.
bis bald
akari
-
Hallo,
mit fstream
#include <fstream> std::ifstream ein("datei", std::ios::binary); ein.seekg(0, std::ios::end); unsigned int size = ein.tellg();Hier wäre nach erzeugen von ein noch eine Abfrage ob die Datei geöffnet werden konnte angebracht.
mit boost::filesystem#include <boost/filesystem/operations.hpp> namespace fs = boost::filesystem; unsigned int size = fs::file_size( fs::path("datei", fs::native) );Bei der boost-Variant sollten noch try/catch drum gemacht werden, da hier bei Dateizugriffsfehler Exceptions geworfen werden.