0

以下のコードで stat() 関数を使用して取得したい長さのファイルがあります。

FILE *file = fopen(filename, "r");
 int filesize, i;


 if(file==NULL)
{
        printf("Could not open mea.dat!\n");
    return ; 
}

        struct stat st;
        stat(filename, &st);
        filesize = st.st_size;
  .........

しかし、ファイルサイズを確認すると、数値的に数えるだけでファイルコンテンツの長さが101であるにもかかわらず、値1504が得られたため、ファイルサイズは102である必要がありました。どこに行方不明ですか?

4

3 に答える 3

0

問題のファイルはスパース ファイルですか?

スパース ファイルでは、データのブロックはディスク上にありませんが、ls -l によって報告されます。スパース ファイルの例を次に示します。

ls -ls sparse
2 -rw-r--r-- 1 root sys 1048577 Feb 20 12:58 sparse

一番左の 2 は実際に使用されたブロック数で、1088577 はファイルに割り当てられたバイト数です (すべてが実際にディスク上にあるわけではありません)。2 つのブロック (通常、私がこれを行ったボックスでは 1024) の合計は 1058577 にならないため、この方法でスパース ファイルを表示できます。

于 2012-02-20T21:25:32.653 に答える