2012-08-01 105 views
-1

如何在C檢索文件/文件夾的屬性,特別是在Linux呢?如何讀取Linux中的文件/文件夾屬性?

我需要有關創建日期,最後修改,isDirectory或ISFILE,許可權,所有權和大小信息。

謝謝。

+0

http://en.wikipedia.org/wiki/Stat_%28system_call%29的 – 2012-08-01 18:57:39

+0

可能重複[如何獲得類似文件的信息「LS -la」 用C?(http://stackoverflow.com/questions/7943220/how-to-get-file-information-similar-to-ls-la-using-c) – 2012-08-01 18:58:06

+0

良好的文檔在這裏,我會討厭看到這個關閉作爲重複.. – 2012-08-01 19:13:06

回答

3

你很可能需要在stat() function.

例子:

struct stat attr; 
stat("/home/crazyfffan/foo.txt", &attr); 

printf("Size: %u\n", (unsigned)attr.st_size); 
printf("Permissions: %o\n", (int)attr.st_mode & 07777); 
printf("Is directory? %d\n", attr.st_mode & ST_ISDIR); 

+0

最後一行沒有編制,而不是我用: '的printf( 「是目錄%d \ n嗎?」,S_ISDIR(attr.st_mode));' – 2012-08-01 22:11:33

+0

@crazyfffan是的,對不起,更新。 – 2012-08-01 22:34:48

3

使用stat系統調用。 man 2 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 */ 
     }; 

過目在有關確定使用st_mode領域的文件類型的詳細信息手冊頁的例子;這裏是如何使用POSIX宏檢查isDirectory/isFile

isDirectory = S_ISDIR(statBuf.st_mode); 
isFile = S_ISREG(statBuf.st_mode); 
1
struct stat file_stats;  

fd = open(filename, O_RDONLY); 
if (fd == -1) { 
    exit(-1); 
} 

if (fstat(fd, &file_stats) < 0) { 
    exit(-1); 
} 
if (S_ISDIR(file_stats.st_mode)) { 
     printf("It is dir\n"); 
} else { 
    snprintf(msg, PATH_MAX, "%lld, %ld, %o, %d, %d, %d, %lld, %ld, %ld, %ld, %ld, %ld, 
    %ld\n", 
      file_stats.st_dev, 
      file_stats.st_ino, 
      file_stats.st_mode, 
      file_stats.st_nlink, 
      file_stats.st_uid, 
      file_stats.st_gid, 
      file_stats.st_rdev, 
      file_stats.st_size, 
      file_stats.st_blksize, 
      file_stats.st_blocks, 
      file_stats.st_atime, 
      file_stats.st_mtime, 
      file_stats.st_ctime); 
} 
+0

沒有關於這些字段是什麼的描述,這並不像它可能的那樣有幫助。 – 2012-08-01 19:10:56