文件流寻找正确的位置,而fstream没有

时间:2015-05-14 03:44:46

标签: c# c++ boost

在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字节。错误与指定的文件找不到时完全相同。

1 个答案:

答案 0 :(得分:1)

您正在明确地告诉mapped_file_source要映射的最大文件大小是100个字节。那么为什么你认为你可以进入20000000并阅读任何东西?

请参阅reference on mapped_file_source

  

概述:默认情况下,文件在打开之前必须存在,并且不会被截断;尝试写入文件末尾会导致错误。

     

构造函数文档:   length - 要映射的字节数。如果未指定此参数,则映射整个文件。