2010-09-02 23 views
2

我必須處理非常大的日誌文件(數百GB),爲了加快速度,我想在所有可用的內核上分割該處理。使用seekg和tellg我可以估算出相對較小文件中的塊大小,並將每個線程定位在這些塊的開始位置,但當它們變大時索引溢出。將ifstream定位在非常大的文件中

使用C++ ifstreams和Linux時,如何在非常大的文件中定位和索引?

此致敬禮。

+0

另請參見http://stackoverflow.com/questions/1300623/ – MSalters 2010-09-03 09:13:33

回答

2

最簡單的方法是在64位操作系統上執行處理,然後使用64位編譯器編寫代碼。這將(至少通常)給你一個64位的文件偏移類型,所以溢出不再發生,並且生活很好。

1

你有兩個選擇:

  1. 使用64位操作系統。
  2. Use OS specific functions
+0

實際上,還有第三種:使用標準庫實現,該實現使用正確的操作系統特定函數。標準庫實現沒有理由選擇操作系統提供的小文件功能。 – MSalters 2010-09-03 08:14:35

+0

@ MSalters,MSVC++使用'long'作爲'streampos'的基礎類型,因此它不支持Win32中大小超過4GB的文件。所以這在Windows中不是一個選項。我不知道Linux中的GNU C++標準庫實現,但它似乎並不支持32位操作系統中的大文件。 – 2010-09-03 08:24:36

+1

據我所知,MSVC至少從VS2010切換到64位。 – MSalters 2010-09-03 08:43:11