vb.net - vb.net 如何在不使用内存的情况下读取非常大文件的一小部分?
问题描述
我使用控制台应用程序来处理大文件。我用
IO.File.ReadAllBytes(OpenFileDlg.FileName)
但它会将所有大文件加载到内存中,并在内存已满时停止,而不是完全读取它。我想拆分大文件或读取其中的一部分,“无需将所有文件加载到内存中,因此它可以在小 RAM 上工作”
解决方案
用于FileStream
读取 4096 字节的块,然后对其进行加密(或进行任何必要的处理),然后将它们写入新的文件流,因为它正在流入/流出,它不会占用所有试图读取/写入所有内容的内存一次,简单的例子:
Dim bytesRead As Integer
Dim buffer(4096) As Byte 'Default buffer size is 4096
Using inFile As New IO.FileStream("C:\\Temp\\inFile.bin", FileMode.Open)
Using outFile As New IO.FileStream("C:\\Temp\\outFile.bin", FileMode.Append, FileAccess.Write)
Do
bytesRead = inFile.Read(buffer, 0, buffer.Length)
If bytesRead > 0 Then
' Do encryption or any necessary processing of the bytes
outFile.Write(buffer, 0, bytesRead)
End If
Loop While bytesRead > 0
End Using
End Using
推荐阅读
- asp.net-mvc - MSBuild web 包没有额外的文件/目录结构
- c# - 如何计算开始坐标和结束坐标之间的坐标 - uwp c#
- visual-studio-code - vscode中的Mypy构建任务失败
- react-native - React Native 样式覆盖数组
- r - 将 SAS 中的 NESTED IF 语句转换为 R
- c# - 取消选择项目时如何停止语音 Windows.Media.SpeechSynthesis
- android - 对话框滞后于视图通胀
- javascript - 向 D3 瀑布图添加多个小计
- java - 使用 webtarget 从客户端调用休息请求。但是休息资源的参数没有映射到客户端模型类参数
- java - 使用 Spring JPA 的单向多对多映射