在 C# 中创建部分(或有界)FileStream

2024-01-29

我有一个 FileStream,它由放入一个文件中的多个文件组成,并且我有一个文件长度的列表,换句话说,我可以轻松计算所有文件的位置和长度。我想要创建的是一个 Open 方法,它接受文件索引并返回仅包含该文件的流。目前我已经使用内存流实现了这一点,但这迫使我将整个(不是容器,而是整个包含的)文件复制到内存中,而我不想这样做。所以,我希望能够做的是创建一个实现流并接受另一个流、偏移量和长度参数的类,然后是可读和可查找的,只有当您执行 Seek(0) 时,您才应该获得偏移量的底层流。就像适配器类一样,我想知道这是否可能,甚至是一个好主意,或者是否有人对如何解决这个问题有更好的想法。我意识到,如果我按照我刚才描述的方式进行操作,我需要确保对底层流的访问是同步的,并且所有打开的部分流都拥有一个私有变量,告诉它们当前在流中的位置,但是这个应该是可行的,对吧?以前有人做过这样的事情吗?或者有一个简单的 .NET 类我可以使用吗?任何帮助,将不胜感激。

哦,抱歉英语不好,我忘记用英语安装浏览器,所以拼写检查器告诉我一切都错了。


如果您使用.NET 4.0,您可以使用内存映射文件 http://msdn.microsoft.com/en-us/library/dd997372.aspx。它们几乎完成了您所描述的操作:您可以将由偏移量和长度指定的大文件的“视图”映射到内存中,并使用Stream.

否则,我认为你的方法听起来不错。只需注意涉及超出预期文件边界的读取或写入的极端情况!

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

在 C# 中创建部分(或有界)FileStream 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • 使用一次更新设置多列

    如何在mysql中使用更新查询设置表的多列 只需添加参数 用逗号分隔 UPDATE tablename SET column1 value1 column2 value2 也可以看看 mySQL 更新手册 http dev mysql co
  • 如何在 VS2010 Express 中使静态库独立于发布/调试?

    我正在编写一个应用程序并链接 SDL 和 OpenGL 在我的代码中 我有以下几行 pragma comment lib sdl lib pragma comment lib sdlmain lib pragma comment lib o
  • 根据方法参数生成唯一的缓存键

    我有一个基本的存储库框架 它最终执行查询并将结果映射回对象 例如 public SomeEntity Get id return base GetItem
  • 如何在 iOS 中正确变形文本?

    我拼命地想改变smallLabel into a bigLabel By morphing 我的意思是转换一个标签的以下属性以匹配另一个标签的相应属性 并具有平滑的动画 字体大小 字体粗细 框架 即边界和位置 所需的效果应该类似于使用大标题
  • 在 2.6 上合并 n 字典并添加值的最快方法[重复]

    这个问题在这里已经有答案了 我有一个字典列表 我想将其组合成一个字典 并添加列表中每个字典中的值 例如 ds 1 1 2 0 3 0 1 2 2 1 3 0 1 3 2 2 3 1 4 5 最终结果应该是一个字典 merged 1 6 2
  • PHP:$_POST 全局变量的总长度是多少?

    我想知道是否有人知道全球邮政的总长度 例如 POST formInput hello world how long can I be 我正在创建一个网站 有人会在其中输入未知数量的字符textarea 因此可能是一个 Word 文档的 2
  • 重定向 ip6tables 中的端口

    如何使用 ip6tables 将一个端口重定向到另一个本地端口 例如像这样的东西 ip6tables t nat A 预路由 j 重定向 p tcp dport 443 to ports 8443 嗯 这是一个老问题 但因为我需要做同样的事
  • Android 模拟 Espresso 测试的 Dagger2 注入依赖项

    我注入了严重的依赖项 dagger2 应用 我想经营一个浓缩咖啡测试无需测试浏览整个应用程序并登录到应用程序 我想开始我的 teleActivity 并模拟登录管理器 然而 在任何 test 函数中 当我们调用 onCreate 时 我们已
  • 如何在 Python 中使用 PCA/SVD 进行特征选择和识别?

    我正在跟进Python 中的主成分分析 https stackoverflow com questions 1730600 principal component analysis in python在Python下使用PCA 但我很难确定
  • 上传文件到android市场时出错

    当我在 Android 市场上传我的应用程序时 它显示以下错误 文件无效 错误 转储失败 因为找不到 AndroidManifest xml 当我解压 apk 文件时 AndroidManifest xml 文件就在那里 有什么问题 在an
  • C#.NET 中的 JPEG 2000 支持

    NET 似乎无法使用 GDI 库打开 JP2 Jpeg 2000 文件 我在谷歌上搜索过 但找不到任何库或示例代码来执行此操作 有人有什么想法吗 我真的不想花钱让图书馆来做这件事 除非我必须 似乎我们可以使用自由图像 http freeim
  • PHP:在 for () 循环中创建函数

    有谁知道我如何编写一个函数 该函数能够使用变量的内容作为其名称来创建其他函数 这是我在 php 中讨论的一个基本示例 function nodefunctioncreator for i 1 i lt 10 i newfunctionnam
  • 在 Ruby 中递归列出目录的单行代码?

    在 Ruby 中获取目录 不包括文件 数组的最快 最优化的单行方法是什么 包含文件怎么样 Dir glob for directories Dir glob for all files 代替Dir glob foo 你也可以写Dir foo
  • Python 支持短路吗?

    Python 支持布尔表达式中的短路吗 是的 两个and and or运算符短路 参见the docs http docs python org library stdtypes html highlight short 20circuit
  • 当我指定凭据时,为什么我的 Http 客户端会发出 2 个请求?

    我创建了 RESTful Web 服务 WCF 在其中检查每个请求的凭据 我的一个客户是 Android 应用程序 服务器端的一切似乎都很棒 我收到请求 如果它有正确的标头 我会处理它 等等 现在我创建了使用此服务的客户端应用程序 这就是我
  • java jprogressbar 在繁重操作期间挂起

    我正在编写一个 java 程序 在调用大量使用 CPU 的方法之前 我会显示一个带有 JProgressBar 的框架 虽然我在调用方法之前显示它 但直到方法结束才显示 JProgressBar 进度条 还 没有以任何方式与该方法交互 这就
  • 如何将汉字一一拆分?

    如果没有特殊字符 如空白 等 在名字和姓氏之间 那么下面如何拆分汉字呢 use strict use warnings use Data Dumper my fh DATA my fname 小三 my lname 张 while my n
  • 监控浏览器控制台中的所有 JavaScript 事件

    是否可以监听所有的javascript事件 我试图猜测 AJAX 请求修改 DOM 后是否会触发事件 With firebug http getfirebug com wiki index php Command Line API moni
  • Git 恢复未按预期工作

    我遇到了问题git revert命令 我使用 Ubuntu 12 04 Linux 和 Git 版本 1 7 9 5 我创建了一个全新的b test repo在我的本地电脑上 从远程跟踪它origin b test repo 我在本地创建了
  • 在 C# 中创建部分(或有界)FileStream

    我有一个 FileStream 它由放入一个文件中的多个文件组成 并且我有一个文件长度的列表 换句话说 我可以轻松计算所有文件的位置和长度 我想要创建的是一个 Open 方法 它接受文件索引并返回仅包含该文件的流 目前我已经使用内存流实现了