【发布时间】:2017-08-07 06:29:24
【问题描述】:
我有以下代码:
/*write to file*/
std::basic_ofstream<unsigned short> out(path, std::ios::out);
unsigned short *arr = new unsigned short[500];
for (int i = 0; i < 500; i++)
{
arr[i] = i;
}
out.write(arr, 500);
out.close();
/*read from file*/
unsigned short * data = new unsigned short[500];
std::basic_ifstream<unsigned short> rfile(path);
rfile.read(data, 500);
rfile.close();
我只需将一个无符号短数组写入文件然后我读取它,但读取的值是正确的,直到数组中的索引 25,之后的值为 52685。
问题出在哪里?
【问题讨论】:
-
out.write(arr, 500);非常接近,但write需要字节而不是数组元素的计数。out.write(arr, 500* sizeof(arr[0]));应该为你做。read同上。 -
请注意,如果您在 25 时得到错误值,要么您的数组有 50 个元素长,您的编译器使用了一个非常大的
short,或者还有其他事情发生没看到。 -
我检查了它,它不起作用。奇怪的是它将数组保存到文件中的 255
-
确认。 255讲述了这个故事。文件在文件中找到一个 eof 字符并退出 .
out(path, std::ios::out);需要指定二进制读写。试试out(path, std::ios::binary);。read也一样。不需要std::ios::out,因为它是通过创建ofstream来暗示的。 -
这导致了一些有趣的路径。我以前从未尝试过使用
std::basic_ofstream<unsigned short>。坦率地说,我无法让它工作。write每次都失败,我在这个时间还不够清醒,无法完全解开缺失的内容。但是如果你std::ofstream out("test.bin", std::ios::binary);并在读写时将数组转换为char*你应该回到游戏中。
标签: c++ arrays file ifstream ostream