en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

7.17.2012

查詢裝置儲存空間資訊的方法


 

若是想要得知裝置上的儲存空間資訊,像是總容量或是剩餘空間等等,可以透過下列的方法來實作,如果你是使用模擬器來實作本示範,則所取得的儲存空間資訊會以本機的硬碟容量做參照。

在開始前要先引入 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);

上述程式碼的執行結果







沒有留言:

張貼留言