2013-04-14 237 views
4

我正在嘗試將數據從二維數組寫入二進制文件。我只寫入數值大於0的數據。因此,如果數據爲0,則不會寫入文件。該數據如下:將二維數組寫入/讀取二進制文件C++

Level  0 1 2 3 4 5 

Row 0  4 3 1 0 2 4 
Row 1  0 2 4 5 0 0 
Row 2  3 2 1 5 2 0 
Row 3  1 3 0 1 2 0 

void { 

    // This is what i have for writing to file. 

    ofstream outBinFile; 
    ifstream inBinFile; 
    int row; 
    int column; 

    outBinFile.open("BINFILE.BIN", ios::out | ios::binary); 

    for (row = 0; row < MAX_ROW; row++){ 

     for (column = 0; column < MAX_LEVEL; column++){ 

      if (Array[row][column] != 0){ 

      outBinFile.write (reinterpret_cast<char*> (&Array[row][column]), sizeof(int) 
      } 
     } 
    } 

    outBinFile.close(); 

    // Reading to file. 

    inBinFile.open("BINFILE.BIN", ios::in | ios::binary); 

    for (row = 0; row < MAX_ROW; row++){ 

     for (column = 0; column < MAX_LEVEL; column++){ 

      if (Array[row][column] != 0){ 

      inBinFile.read (reinterpret_cast<char*> (&Array[row][column]), sizeof(int) 
      } 
     } 
    } 

    inBinFile.close(); 
} 

所有被讀取被插入的第一行中的數據,我怎樣才能要加載的數據,因爲我退出程序?

回答

2

只讀數據不等於零時,表示它被第一個零鎖定。一旦達到零就停止閱讀。

之前「如果命令」讀取文件的其他變量然後在if(變量!= 0)數組[行] [列] =變量。

如果你的數組是初始化的數據,也許看看你的閱讀設置位置。所以要確定我有零,我應該從另一個位置讀下。

+0

謝謝user1678413 – llSpectrell

0

二進制文件需要一個簡單的內存轉儲。我在Mac上,所以我不得不找到一種方法來計算數組的大小,因爲sizeof(數組名稱)由於某種原因沒有返回數組的內存大小(macintosh,netbeans IDE,xCode編譯器)。我不得不使用的解決方法是: 寫入文件:

fstream fil; 
fil.open("filename.xxx", ios::out | ios::binary); 
fil.write(reinterpret_cast<char *>(&name), (rows*COLS)*sizeof(int)); 
fil.close(); 
//note: since using a 2D array &name can be replaced with just the array name 
//this will write the entire array to the file at once 

讀是一樣的。由於我使用的Gaddis書籍中的例子在Macintosh上無法正常工作,我必須找到一種不同的方法來實現這一點。只好用下面的代碼片段

fstream fil; 
fil.open("filename.xxx", ios::in | ios::binary); 
fil.read(reinterpret_cast<char *>(&name), (rows*COLS)*sizeof(int)); 
fil.close(); 
//note: since using a 2D array &name can be replaced with just the array name 
//this will write the entire array to the file at once 

而不是隻讓你需要的行*列乘以一個二維數組,然後通過大小相乘來計算整個數組的大小整個數組的大小的數據類型(因爲我使用了整型數組,在這種情況下它是int)。