Sida 1 av 1

C – storlek på fil

Postat: 11 mar 2012, 21:05
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…

Re: C – storlek på fil

Postat: 11 mar 2012, 21:29
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…