在C#中
FileStream fs("file.bin",/*Open in binary, read only mode*/);
var bytes = new byte[100];
fs.Seek(20000000, SeekOrigin.Begin); //*20000000*
fs.Read(bytes, 0, 100);
在C ++中,istream
始终变为null
typedef std::shared_ptr<boost::iostreams::mapped_file_source> FileStream;
FileStream fs = FileStream(new boost::iostreams::mapped_file_source("file.bin", 100, 0));
if (fs->is_open())
{
boost::iostreams::stream<boost::iostreams::mapped_file_source> is(*fs.get());
if (is.seekg(20000000, is.beg))
//read 100 characters from 20000000th position
fs->close();
}
如果我改变了
boost::iostreams::stream<boost::iostreams::mapped_file_source> is(*fs.get());
成
boost::iostreams::stream<boost::iostreams::mapped_file_source> is("file.bin");
is
已初始化,但仍然无法读取20000000th
字节。错误与指定的文件找不到时完全相同。
答案 0 :(得分:1)
您正在明确地告诉mapped_file_source
要映射的最大文件大小是100个字节。那么为什么你认为你可以进入20000000并阅读任何东西?
请参阅reference on mapped_file_source
概述:默认情况下,文件在打开之前必须存在,并且不会被截断;尝试写入文件末尾会导致错误。
构造函数文档: length - 要映射的字节数。如果未指定此参数,则映射整个文件。