若是想要得知裝置上的儲存空間資訊,像是總容量或是剩餘空間等等,可以透過下列的方法來實作,如果你是使用模擬器來實作本示範,則所取得的儲存空間資訊會以本機的硬碟容量做參照。
在開始前要先引入 mount.h 標頭檔,才有辦法取得裝置儲存空間的使用狀況。
#import <sys/mount.h>
在開始取得儲存空間的相關資訊前,要先宣告一個 statfs 的結構,你可以查閱 mount.h 了解更多有關此結構的內部資訊,以下是 statfs 結構中所包含的資訊。
struct statfs {
short f_otype; /* TEMPORARY SHADOW COPY OF f_type */
short f_oflags; /* TEMPORARY SHADOW COPY OF f_flags */
long f_bsize; /* fundamental file system block size */
long f_iosize; /* optimal transfer block size */
long f_blocks; /* total data blocks in file system */
long f_bfree; /* free blocks in fs */
long f_bavail; /* free blocks avail to non-superuser */
long f_files; /* total file nodes in file system */
long f_ffree; /* free file nodes in fs */
fsid_t f_fsid; /* file system id */
uid_t f_owner; /* user that mounted the filesystem */
short f_reserved1; /* spare for later */
short f_type; /* type of filesystem */
long f_flags; /* copy of mount exported flags */
long f_reserved2[2]; /* reserved for future use */
char f_fstypename[MFSNAMELEN]; /* fs type name */
char f_mntonname[MNAMELEN]; /* directory on which mounted */
char f_mntfromname[MNAMELEN]; /* mounted filesystem */
char f_reserved3; /* For alignment */
long f_reserved4[4]; /* For future use */
};
接下來就可以使用下列程式碼來取得儲存空間的相關資訊。
//將取得的資訊以轉換成statfs結構儲存
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
struct statfs tStats;
statfs([[paths lastObject] cString], &tStats);
//取得statfs結構中的資訊並轉換成對應的單位
double total_space = tStats.f_blocks * tStats.f_bsize / 1024.0 / 1024.0 / 1024.0;
double free_space = tStats.f_bfree * tStats.f_bsize / 1024.0 / 1024.0 / 1024.0;
NSLog(@"容 量:%0.2f GB", total_space);
NSLog(@"剩餘空間:%0.2f GB", free_space);
上述程式碼的執行結果 |
沒有留言:
張貼留言