C – storlek på fil

Här diskuteras programmering och utveckling
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

C – storlek på fil

Inlägg av Johnny Rosenberg »

När jag letade efter annat råkade jag hamna på denna sida där följande kodexempel finns att beskåda:

Kod: Markera allt

//C program using fcntl.h to get the size of a file.
 
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
 
int main(int argc, char** argv) { 
 
  int fp;
  long int file_size;
 
  if (argc < 2) {
    fprintf(stderr, "Correct usage: %s <filename>\n", argv[0]); 
    return 1; 
  }
 
  if ((fp = open(argv[1], O_RDONLY)) == -1) {
    fprintf(stderr, "Error opening the file \n"); 
    return 1;
  }
 
  file_size = filelength(fp); 
  printf("The file size in is %ld bytes.\n", file_size); 
  close(fp); 
 
  return 0; 
}
Dock visar det sig när man kompilerar att funktionen ”filelength” inte existerar i fcntl.h eller någon annanstans heller för den delen.
Sökte en hel del och fann att någon som heter ”io.h” skulle innehålla en funktion som heter ”_filelength”, men ”io.h” är inget jag verkar ha installerat på min dator. Vidare efterforskning visade dessutom att ”io.h” bara är kompatibelt med diverse Windows-versioner, så jag antar att det inte är någon större idé att jag letar vidare efter den.

Men det är ju fullt möjligt att en liknande funktion finns på annat håll. Någon som har några tips? Annars vet jag att man kan komma runt det hela ganska enkelt, men om det nu skulle finnas en färdig funktion någonstans, så känns det ju dumt att uppfinna hjulet på nytt…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: C – storlek på fil

Inlägg av Johnny Rosenberg »

Hittade en lösning precis efter att jag skrivit detta, och jag behövde inte ens öppna filen. Behövde inte ens inkludera fcntl.h:

Kod: Markera allt

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char** argv) { 
	struct stat st;

	if (argc < 2) {
		fprintf(stderr, "Används så här: %s <filename>\n", argv[0]); 
		return 1; 
	}

	stat(argv[1], &st);
	printf("Filen %s är på %ld bytes.\n", argv[1], st.st_size); 

	return 0; 
}

Kod: Markera allt

$ gcc Test.c -o Test; ./Test Test.c 
Filen Test.c är på 296 bytes.
$
Kan intyga att filstorleken i exemplet stämmer…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Programmering och webbdesign"