【发布时间】:2012-01-22 19:51:17
【问题描述】:
我有将文本文件读入内存的当前代码:
std::streampos fsize = 0;
std::ifstream file(fileName, std::ios::binary); // open file
if(!file.good()) {
std::cout << "Error opening file";
return 0;
}
// get length of file
file.seekg(0, ios::end);
fsize = file.tellg();
// allocate memory
char *memory = new char[fsize];
// read data as a block
file.seekg (0, ios::beg);
file.read (memory, fsize);
file.close(); // close file
return fsize;
现在我有了迭代它的代码。如果该行以 'v' 开头,则它读取前面的 3 个浮点值,如果它以 'n' 开头,则读取相同的值,但进入不同的数组。
char* p = memory; // pointer to start of memory
char* e = memory + fsize; // pointer to end of memory
while (p != e) {
if (memcmp(p, "v", 1) == 0) {
sscanf(p, "v %f %f %f", &a[vI], &b[vI], &c[vI]);
vI++;
} else if (memcmp(p, "n", 1) == 0) {
sscanf(p, "v %f %f %f", &d[nI], &e[nI], &f[nI]);
nI++;
while (*p++ != (char) 0x0A);
}
我知道必须有更好/更安全的方法来做到这一点。
【问题讨论】:
-
您以二进制模式打开文件,但它似乎是一个文本文件。这是故意的吗?
-
嗯,std::ios::in 会更合适吗?
-
如果你有一个文本文件,你不需要指定任何东西,默认就可以了。