2011-09-08 20 views

回答

6

這將取決於你的平臺。在Unix系統上,你可以使用off_t類型。在Windows上,您可能需要使用LARGE_INTEGER。這些是通過返回文件大小的函數在這些系統上使用的類型(Unix上的stat,Windows上的GetFileSize)。

如果你想要一個便攜式的,uint64_t應該足夠大。

+0

快速Google會議後,它看起來像uint64_t是我想要的。謝謝!我對答覆的數量和響應時間感到不知所措。太棒了! – EnibMoc1994

+1

@ EnibMoc1994:您也可以使用'long long'或其未簽名的合作伙伴,它們至少保證64位。 – caf

1

long long是彈出收藏:)

1

爲size_t是通常在C的filesizes,但它的類型依賴於平臺(在Windows的32位或64位無符號整數)。我建議__int64(一個64位int) - 應該處理多達138,547,332 terrabytes。

編輯:只是檢查,Windows API調用GetFileSizeEx得到一個LARGE_INTEGER,這是一個64位有符號整數。所以LARGE_INTEGER也是一個不錯的選擇。

+2

爲了記錄,在64位版本中'size_t'的大小是64位。 –

+0

它不是'unsigned int',它是一個無符號整數類型。 – paxdiablo

+0

道歉,@paxdiablo,它實際上是平臺依賴,如你所暗示的。在使用32位的Windows上,它相當於一個unsigned int。上次我相信Visual Studio告訴我的。 :)編輯我的答案是更精確。更多信息請看:http://en.wikipedia.org/wiki/Size_t –

2

有一個函數叫做ftello(),它返回一個off_t

隨着fgetpos(),你需要一個fpos_t變量 - 編輯:這不一定是一種算術類型。

因此off_t可能/應該適合您的需要,並保持您獨立於實際數據類型的大小。

+0

只要注意''ftello'和'off_t'是Posix,而不是標準C. –

+0

如果你沒有'off_t',你也沒有'ftello',並且沒有(可移植的)方法來獲得更大的文件偏移量比'長'... –

1

你可能想看看使用off_t,因爲這是什麼標準功能,如fseekoftello使用。

1

該libc stat使用off_t,這是一個unsigned,64位寬類型的typedef。這將適合一段時間。

+0

off_t是在OS X上長簽名的typedef。 –

相關問題