-1

Are there various print formatters for the file object? For example:

// pass the filepath
char * filepath = argv[1];
FILE * file = fopen(filepath, "r");
printf("Filepath: %s\n", file.size);

Error message:

main4.c:416:32: error: no member named 'size' in 'struct __sFILE'

What are the various items that can be printed from the struct?

klutt
  • 30,332
  • 17
  • 55
  • 95
FI-Info
  • 635
  • 7
  • 16
  • See [this question](https://stackoverflow.com/q/5672746/3049655). Also, use `ftell` if you want to get the size of the file – Spikatrix Sep 11 '19 at 04:54
  • 2
    @Spikatrix: As far as the C standard is concerned, `ftell` cannot reliably get the size of a file. Since you can't do it portably, you might as well use non-portable functions like `stat` and `fstat` (or whatever the Windows equivalents are). – Keith Thompson Sep 11 '19 at 04:58
  • That code shouldn't have produced that error message. Your `file` object is a pointer, not a structure. `file->size` rather than `file.size` could have produced that error. – Keith Thompson Sep 11 '19 at 05:00
  • 1
    Here's the full list of things that can be printed: – n. m. could be an AI Sep 11 '19 at 05:54

2 Answers2

3

To get various information, You can use stat , lstat which populate the struct stat:

           struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for file system I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };

man page

man page + example

XBlueCode
  • 785
  • 3
  • 18
0

Sounds like you want to use stat():

http://man7.org/linux/man-pages/man2/stat.2.html

or there are always the Win32 funcs such as GetFileSize if you want to target windows.

robthebloke
  • 9,331
  • 9
  • 12