2009-07-07 29 views
0

可能重複:
How to output array of doubles to hard drive?1.4.3雙打的數組到一個文件在硬盤上

大家好,

對不起,問同樣的問題兩次,我是新在此並仍在學習如何正確使用本網站。

我想以一個文件的形式(.txt .dat .bin,無論什麼都沒關係)將一個浮點數/雙精度數組存儲到我的硬盤中。

我希望該文件是原始數組看起來像它坐在RAM中時的鏡像。我也想知道如何快速高效地將數據讀回程序(基本上將硬盤中的數據塊直接複製回RAM中,讓程序知道「this」是一個雙精度數組)。

最後,由於我輸出的數據量很大(根據具體情況可能會達到幾百MB),因此我需要能夠快速有效地完成此操作。

由於提前,

-Faken

+0

只需在您的第一篇文章中使用編輯按鈕。 – 2009-07-07 05:42:11

回答

0

你可以使用SQLite,它提供了方便的訪問到你的程序中使用SQL。 Here you'll find the amalgamation

此外,你可以看看這個SQLite周圍的beautiful C++ wrapper。通過這種方式,您可以立即將數據保存到硬盤,並且您還可以使用高效的查詢來獲取數據。

2

這裏有一些基本的代碼,讓你開始。當然,你會想添加錯誤檢查等。另外,你必須決定是否需要緩衝IO或無緩衝IO。另一種(非便攜式,但可能更快)的方法是繞過STL並直接進入操作系統。最後,我不知道提高,但我得到的印象是幾乎所有你能想到的東西都在那裏,所以你可能也想看看那裏。

#include <fstream> 
#include <string> 

using std::ofstream; 
using std::ifstream; 
using std::string; 

void WriteDoubleArray(const double arr[], size_t size, const string fileName) 
{ 
    ofstream outFile(fileName.c_str(), std::ios::binary); 
    outFile.write((const char *)arr, size * sizeof(arr[0])); 
} 


void ReadDoubleArray(double arr[], size_t size, const string fileName) 
{ 
    ifstream inFile(fileName.c_str(), std::ios::binary); 
    inFile.read((char *)arr, size * sizeof(arr[0])); 
} 
相關問題