2017-06-27 3 views
0

Ich versuche, eine .ply Datei mit C++ zu lesen und die geometrischen Informationen in Vektoren zu speichern (Die Grenzpunkte sind floats und die Randdreiecke sind int's. Der Code funktioniert unter Linux, aber wenn ich versuche, es unter Windows zu verwenden, es nicht wie erwartet verhaltenVerschiedene Ergebnisse beim Öffnen einer binären .ply-Datei mit ifstream unter Windows und Linux

Hier ist eine abgespeckte Version des Codes ist.

#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; 
} 

der Code kompiliert und ausgeführt unter Windows Ausgänge:

0 
0 

unter Linux Während der Ausgang ist:

4 
4 

Mein Gefühl ist, dass die Lesefunktion nicht die richtigen Werte bekommt die Zahlen in den Binär-Dateien zu trennen, aber sizeof(float) und sizeof(int) beide haben den gleichen Wert unter Windows und Linux (4).

Irgendwelche Ideen, wo das Problem liegt?

Vielen Dank für Ihre Hilfe,

+0

Sie keinen Fehler Trapping haben. Haben Sie debugged und testen auf einen Fehler beim Öffnen der Datei? –

+0

Können Sie ein Beispiel für die zu lesende Eingabedatei zeigen? –

Antwort

3

versuchen, die Datei für binäre Lesen zu öffnen:

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

Öffnen Sie die Datei in Binär-Modus und überprüfen Sie die Datei geöffnet.

Sie sind zur Zeit auch Daten von sizeof (float) Lesen in ein Zeichen - seine anderen Daten überschrieben werde an diesem Punkt (numFloat, numInt)

Verwandte Themen