webForumDet fria alternativet

Storleken på en fil

C/C++

4 svar · 180 visningar · startad av zmodem

Medlem sedan apr. 200277 inlägg
Frågan#1

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?

Medlem sedan okt. 20013 217 inlägg
#2

Det går väl att sätta filpekaren till sluten och den metoden returnerar var i filen den befinner sig.

Medlem sedan apr. 200277 inlägg
#3

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?

Medlem sedan apr. 200277 inlägg
#4

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()?

Medlem sedan apr. 200277 inlägg
#5

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;

}

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)