c# - 使用 C# 的更大文件流

标签 c# filestream

我需要使用 C#.Net 访问一些文本文件(记录)。但问题是那些文件大于 1GB。 (最小大小为 1 GB)

我需要做什么? 我需要关注哪些因素?

谁能给我一个摆脱这种情况的想法。

编辑:

感谢您的快速回复。是的,它们是固定长度的记录。这些文本文件来自本地公司。 (有上个月交易记录)

是否可以像普通文本文件一样访问这些文件(使用普通文件流)。

内存管理怎么样????

最佳答案

扩展 CasperOne 的答案

简单地说,没有办法一次可靠地将 100GB 的文件放入内存。在 32 位机器上根本就没有足够的寻址空间。在 64 位机器中,有足够的寻址空间,但在实际将文件放入内存所需的时间里,您的用户会因为沮丧而终止您的进程。

诀窍是增量处理文件。基本 System.IO.Stream() 类旨在处理不同数量的可变(并且可能是无限的)流。它有几个 Read 方法,这些方法只会在流中前进特定数量的字节。您将需要使用这些方法来划分流。

我无法提供更多信息,因为您的场景不够具体。您能否提供更多详细信息或您的记录分隔符或文件中的一些示例行?

更新

如果它们是固定长度的记录,那么 System.IO.Stream 就可以正常工作。您甚至可以使用 File.Open() 来访问底层 Stream 对象。 Stream.Read 有一个重载请求要从文件中读取的字节数。由于它们是固定长度的记录,因此这应该适用于您的场景。

只要您不调用 ReadAllText() 而是使用采用显式字节数组的 Stream.Read() 方法,内存就不是问题。底层 Stream 类会注意不要将整个文件放入内存(当然,除非您要求它:))。

关于c# - 使用 C# 的更大文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447299/

相关文章:

c# - 动态创建的按钮单击事件在 asp.net c# 中不起作用

C++ 级联流插入(硬件帮助)

c++ - token 和文件流

c++ - 使用相同流对象的 io 操作

c# - 渐变不透明度不起作用 (WPF)

c# - VS2010 代码分析期间的 IDisposable 和 CA2000 警告

c# - RavenDb 备份和恢复

c# - 使用 XPath 绑定(bind)表达式时,是否可以取回 InnerXml 而不是 InnerText?

javascript - fs.writeFile 不是 angular2+electron 中的函数

android - 将字节从 FileInputStream 复制到 CipherOutputStream(反之亦然)非常慢