我正在尝试用c ++读取.ply
文件并将几何信息保存在向量中(边界点为floats
,边框三角形为int's
。代码在Linux下运行但是当我尝试在Windows下使用它时,它并没有按预期运行。
以下是代码的精简版:
#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
我的感觉是,read函数没有获得正确的值来分隔二进制文件中的数字,但sizeof(float)
和sizeof(int)
在Windows和Linux下都具有相同的值(4 )。
关于问题所在的任何想法?
感谢您的帮助,
答案 0 :(得分:3)
尝试打开二进制读取文件:
ifstream fin(FilenamePLY.c_str(), std::ios::binary );
答案 1 :(得分:3)
以二进制模式打开文件并验证是否已打开文件。
您目前还正在将sizeof(float)的数据读入一个字符 - 它将在该点覆盖其他数据(numFloat,numInt)