有人可以提供使用 boost iostreams 查找、读取和写入 >4GB 文件的示例吗

2024-03-05

我读到 boost iostreams 据说支持 64 位半便携式方式访问大文件。他们的常见问题解答提到64 位偏移函数 http://www.boost.org/doc/libs/1_39_0/libs/iostreams/doc/faq.html#offsets,但没有关于如何使用它们的示例。有人使用这个库来处理大文件吗?打开两个文件、查找它们的中间部分并将一个文件复制到另一个文件的简单示例将非常有帮助。

Thanks.


简短回答

只需包括

#include <boost/iostreams/seek.hpp>

并使用seek http://www.boost.org/doc/libs/1_42_0/libs/iostreams/doc/functions/seek.html功能如

boost::iostreams::seek(device, offset, whence);

where

  • device是文件、流、streambuf 或任何可转换为的对象seekable;
  • offset是类型的 64 位偏移量stream_offset http://www.boost.org/doc/libs/1_42_0/libs/iostreams/doc/functions/positioning.html#synopsis;
  • whence is BOOST_IOS::beg, BOOST_IOS::cur or BOOST_IOS::end.

返回值seek属于类型std::streampos,并且它可以转换为stream_offset使用position_to_offset http://www.boost.org/doc/libs/1_42_0/libs/iostreams/doc/functions/positioning.html#position_to_offset功能。

Example

这是一个冗长、乏味且重复的示例,它展示了如何打开两个文件、寻找 >4GB 的偏移量以及在它们之间复制数据。

警告:此代码将创建非常大的文件(几个 GB)。在支持稀疏文件的操作系统/文件系统上尝试此示例。 Linux 还可以;我没有在其他系统上测试它,例如Windows。

/*
 * WARNING: This creates very large files (several GB)
 * unless your OS/file system supports sparse files.
 */
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/positioning.hpp>
#include <cstring>
#include <iostream>

using boost::iostreams::file_sink;
using boost::iostreams::file_source;
using boost::iostreams::position_to_offset;
using boost::iostreams::seek;
using boost::iostreams::stream_offset;

static const stream_offset GB = 1000*1000*1000;

void setup()
{
    file_sink out("file1", BOOST_IOS::binary);
    const char *greetings[] = {"Hello", "Boost", "World"};
    for (int i = 0; i < 3; i++) {
        out.write(greetings[i], 5);
        seek(out, 7*GB, BOOST_IOS::cur);
    }
}

void copy_file1_to_file2()
{
    file_source in("file1", BOOST_IOS::binary);
    file_sink out("file2", BOOST_IOS::binary);
    stream_offset off;

    off = position_to_offset(seek(in, -5, BOOST_IOS::end));
    std::cout << "in: seek " << off << std::endl;

    for (int i = 0; i < 3; i++) {
        char buf[6];
        std::memset(buf, '\0', sizeof buf);

        std::streamsize nr = in.read(buf, 5);
        std::streamsize nw = out.write(buf, 5);
        std::cout << "read: \"" << buf << "\"(" << nr << "), "
                  << "written: (" << nw << ")" << std::endl;

        off = position_to_offset(seek(in, -(7*GB + 10), BOOST_IOS::cur));
        std::cout << "in: seek " << off << std::endl;
        off = position_to_offset(seek(out, 7*GB, BOOST_IOS::cur));
        std::cout << "out: seek " << off << std::endl;
    }
}

int main()
{
    setup();
    copy_file1_to_file2();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以提供使用 boost iostreams 查找、读取和写入 >4GB 文件的示例吗 的相关文章

  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • make_shared<>() 中的 WKWYL 优化是否会给某些多线程应用程序带来惩罚?

    前几天我偶然看到这个非常有趣的演示 http channel9 msdn com Events GoingNative GoingNative 2012 STL11 Magic Secrets作者 Stephan T Lavavej 其中提
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig

随机推荐

  • 逐行分割字符串并进行变量化,即将其分配给 GITHUB_OUTPUT - 工作流程

    Github 行动run调用 powershell 返回如下 Powershell返回函数 return psitem Key psitem Value 返回值被分配给 github 操作变量 returnvalue 返回包含一个列表key
  • 使用自定义项目模板在组合框中显示所选项目

    我使用此页面中的代码来设计我的组合框的样式 如何在鼠标悬停时设置组合框背景的样式 https stackoverflow com a 5564151 2848002 我更改了默认项目模板 但现在它们不会出现在所选值区域中 在下图中 您可以看
  • 如何从 XML 文件中删除不可见的垃圾字符

    我想读取一些 xml 文件 当我用记事本 写字板 MS Word 或任何浏览器打开这些文件时 它以其原始形式打开 但是当我尝试用 MS DOS 执行它时 会出现一个看不见的字符 如 被看到 我认为 正在创建一个错误 我发现错误 序言中不允许
  • 防止 System.Window.Forms.ComboBox 的自动选择行为 (C#)

    背景 我有一个Forms ComboBox with a DropDownStyle DropDown 我不使用AutoComplete 但我实现了类似的东西 它不仅过滤文本的开头 而且使用正则表达式并显示与输入的文本匹配的所有项目 这很好
  • C++ - 通过指针访问向量元素的安全性

    在我的一个 C 项目中 我使用的是vector持有一堆struct包含简单游戏的许多元素 即 井字游戏 坐标 x vs o ETC IE struct gameMove int x int y int player int order 每次
  • 带微调器的叠加

    我正在尝试创建一个覆盖层 覆盖一个页面 中间有一个微调器 实现这一目标的最简单方法是什么 我只需要担心 IE 8 及以上版本 使用 css3 类 spinner 它更漂亮而且你不需要 gif spinner position absolut
  • Sweet Alert 2 在父框架中打开

    我有一个 iframe 其源是 php 文件 我想做的是让 Sweet Alert 2 在父框架中打开 而不是在 iframe 内部打开 我尝试过改变目标 但没有成功 以下目标选项均无效 swal target window target
  • 使用 Amazon SNS 使用 PHP AWS SDK v2 发送 SMS 消息?

    我继承了一个 PHP 项目 它与 AWS SDK v2 高度集成 目前无法选择使用 v3 我的问题是如何利用 SNS 根据需要向特定号码发送短信 也就是说 我不想在发生操作时向订阅特定主题的一堆电话号码发送大量通知 我想在发生操作时向特定电
  • 基于 SSL 的 Skype CDN

    我曾经测试登录用户是否可以访问 Skype CDN 来确定是否向他们显示 UI 元素 https cdn dev skype com uri skype uri js 但似乎他们的 CDN 突然移动到了这里 破坏了我的代码 http www
  • MySQL 错误代码:1175 在 MySQL Workbench 中更新期间

    我正在尝试更新专栏visited为其赋予值 1 我使用 MySQL 工作台 并在工作台内部的 SQL 编辑器中编写语句 我正在编写以下命令 UPDATE tablename SET columnname 1 它给了我以下错误 您正在使用安全
  • 如果不指定 ,如何将 传递给 IRB?

    Since irb help 用法 irb rb 选项 程序文件 参数 我知道如果我包含一个 我可以将参数传递给 ARGV程序文件 eg irb test rb A B C 其中 test irb 只是 p ARGV 产生 a b c Ma
  • 需要在java中找到最多三个数字[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中查找不同数据类型的 3 个数字中的最大值 基本 Java https stackoverflow com questions 4982210 find the max of 3 num
  • 如何从字符串创建关键字符号? [复制]

    这个问题在这里已经有答案了 从字符串创建符号非常简单 intern test gt test 我正在努力创造keywordplist 的符号 寻找类似的东西 XXXX test gt test 注意 intern test 不产生keywo
  • C++ 中的记忆函子包装器

    这是我为函数编写的通用记忆包装器 它利用元组哈希 https stackoverflow com questions 7110301 generic hash for tuples in unordered map unordered se
  • HTTP 请求“...”中发现的 MAC 签名与任何计算出的签名不同

    我在 Postman 中发送以下请求 以从此 URL 的 Azure Blob 存储检索简单的 jpghttps steamo blob core windows net testcontainer dog jpg https steamo
  • 将 iQueryable 转换为 IEnumerable

    我下面的代码有什么问题 即使数据库中存在匹配的记录 它也不会返回任何项目 如果错了 我该如何转换我的IQueryable to IEnumerable public IEnumerable
  • 将 Excel 流附加到 swiftmailer 消息中?

    我正在尝试在 SwiftMailer 消息中附加 Excel 文件 诀窍是 我不想保存 Excel 文件 然后附加它 然后删除它 而是我只想生成 Excel 并将其附加到消息中 该函数允许附加一个OutputByteStream Creat
  • D3:更改轴标签的字体大小

    我想为使用 D3 创建的时间轴标签指定字体大小 我试过以下这个答案 https stackoverflow com a 19681335 5522601 with 这把小提琴 https jsfiddle net speedymcs o16
  • MongoDB - 命令失败,错误代码 13“未经 ***** 授权执行此命令”

    因此 由于某些奇怪的原因 我的用户无权在 krimson 数据库中写入任何内容 数据库连接成功 但授予用户写入数据库的访问权限未按预期工作 完全错误 Caused by com mongodb MongoCommandException C
  • 有人可以提供使用 boost iostreams 查找、读取和写入 >4GB 文件的示例吗

    我读到 boost iostreams 据说支持 64 位半便携式方式访问大文件 他们的常见问题解答提到64 位偏移函数 http www boost org doc libs 1 39 0 libs iostreams doc faq h