Det går väl att sätta filpekaren till sluten och den metoden returnerar var i filen den befinner sig.
Hur får man reda på storleken på en binär fil utan att loopa igen hela grejen och räkna? Finns det nåt smidigt sätt jag inte känner till?
4 svar · 180 visningar · startad av zmodem
Hur får man reda på storleken på en binär fil utan att loopa igen hela grejen och räkna? Finns det nåt smidigt sätt jag inte känner till?
Det går väl att sätta filpekaren till sluten och den metoden returnerar var i filen den befinner sig.
alltså, att jag ska sätta den till slutet genom att skriva
seekg(fin, ios_base::end, ios_base::beg);
eller hurdå? menar du att seekg-funktionen skulle returnera nåt värde eller?
Hittade denhär kodsnutten på nätet...
---
/* Include files needed */
# include <stdio.h>
/* The function */
unsigned long filesizeof(FILE *stream){
long curpos, length;
/* Save the current position of the file pointer */
curpos = ftell(stream);
/* Go to the end of file */
fseek(stream, 0L, SEEK_END);
/* The length is the position of the pointer */
length = ftell(stream);
/* Set the pointer to the old position */
fseek(stream, curpos, SEEK_SET);
/* Return the length */
return length;
}
---
det kanske var så du menade? men hur gör man motsvarande i C++ utan att includa <stdio.h>? vad heter alltså motsvarigheten till ftell()?
Ok, problemet är löst, min bok hade glömt att nämna en smidig metod som heter tellg() och finns i ifstream-objekt. såhär ser min funktion för att ta reda på filstorleken ut:
unsigned long filesize (string filename) {
unsigned long fs = 0;
ifstream fin (filename.c_str());
if (!fin.is_open())
return 0;
fin.seekg(0, ios_base::end);
fs = fin.tellg();
fin.close();
return fs;
}