2017-06-27 48 views
0

我試圖用C++讀取一個.ply文件並將幾何信息保存到向量中(邊界點是floats,邊框三角形是int's。 Linux下工作,但是當我嘗試使用它在Windows下按預期的行爲不在windows和linux下使用ifstream操作二進制.ply文件時出現的結果不同

下面是代碼的下調版本:

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <vector> 

using namespace std; 

string FilenamePLY; 

int NumberBorderPoint = 1572866; 
int BorderNumberTriangle = 3145728; 

char numFloat; 
char numInt; 

int main(int argc, char** argv) 
{ 
    FilenamePLY = "file_test.ply"; 

    ifstream fin(FilenamePLY.c_str()); 

    for (int i = 0; i < NumberBorderPoint; i++){ 
      fin.read(&numFloat, sizeof(float)); 
      for (int j = 0; j < 3; j++) { 
       fin.read(&numFloat, sizeof(float)); 
      } 

    } 
    cout << fin.gcount() << endl; 

    for (int i = 0; i<BorderNumberTriangle; i++){ 
      fin.read(&numInt, sizeof(int)); 
      for (int j = 0; j<3; j++) { 
       fin.read(&numInt, sizeof(int)); 
      } 
    } 
    cout << fin.gcount() << endl; 
    return 0; 
} 

Windows下輸出編譯和執行的代碼:

0 
0 

而Linux下的輸出是:

4 
4 

我的感覺是讀取功能沒有得到正確的值到數字的二進制文件分開,但sizeof(float)sizeof(int)都具有相同的價值在Windows和Linux下(4)。

關於問題出在哪裏的任何想法?

感謝你的幫助,

+0

你沒有錯誤捕獲覆蓋其他數據。您是否調試並測試了打開該文件的錯誤? –

+0

你能展示一個正在讀取的輸入文件的例子嗎? –

回答

3

嘗試打開該文件二進制閱讀:

ifstream fin(FilenamePLY.c_str(), std::ios::binary); 
3

以二進制方式打開文件,並確認你打開的文件。

您還正在閱讀的sizeof(浮動)的數據爲角色 - 它會在這一點上(numFloat,numInt)

相關問題