Invece di
che ti procura solo un bernoccolo, leggi bene cosa dice la documentazione di fread()
The total number of elements successfully read is returned as a size_t object, which is an integral data type.
If this number differs from the count parameter, either an error occured or the End Of File was reached.
You can use either ferror or feof to check whether an error happened or the End-of-File was reached.
Cioè ritorna il numero di caratteri letti, che può essere anche minore di quello che richiedi (o zero se non legge niente), il che, però, non è un errore.
Tra l'altro fai un altro errore usando _TCHAR. fread() legge sempre e comunque dei char, quindi la dimensione del buffer deve tenerne conto se _TCHAR == wchar_t.
codice:
result = fread (buffer,1,lSize* sizeof(_TCHAR) ,pFile );
Considera poi che lo 0 in una lettura binaria è un valore valido, quindi il valore di ritorno della fread non puoi usarlo per intervenire in maniera diretta sul buffer trattandolo con le funzioni di stringa del C.
In definitiva devi modificare il codice in questo modo.
codice:
buffer = (char*) malloc (lSize+1); // +1 per sicurezza.
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
bytesRead = fread (buffer,lSize,1,pFile);
if (bytesRead == 0 ) {
fputs ("Reached end of file",stderr);
}
for (i = 0; i < bytesRead; i++) {
fputc( buffer[i], stdout));
}
P.S.
Nel topic parli di C++, nel post usi il filesystem del C. Qualche motivo particolare?