Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net如何在不使用内存的情况下读取非常大文件的一小部分?_Vb.net_File_Memory - Fatal编程技术网

vb.net如何在不使用内存的情况下读取非常大文件的一小部分?

vb.net如何在不使用内存的情况下读取非常大文件的一小部分?,vb.net,file,memory,Vb.net,File,Memory,我使用控制台应用程序处理大文件。我用 IO.File.ReadAllBytes(OpenFileDlg.FileName) 但它会加载内存中的所有大文件,并在内存已满时停止,而不会完全读取它。 我想拆分大文件或读取其中的一部分,“而不将所有文件加载到内存中,这样它就可以在小RAM上工作”使用FileStream读取4096字节的数据块,然后对它们进行加密(或进行任何必要的处理),然后将它们写入新的文件流,因为它是流式输入/输出的,所以它不会占用所有内存试图同时读取/写入所有内容,简单示例: D

我使用控制台应用程序处理大文件。我用

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

你知道你需要在什么偏移量开始阅读吗?如果是这样,使用流和偏移量。不,我尝试打开大文件而不是文本,可能有高清视频,所以我没有偏移量,嗯,正好相反。通常,如果是文本文件,则没有偏移量。也许你在找一根绳子。如果它是一个二进制文件,那么可以指定一个偏移量。你是说你不知道从哪里开始阅读?你到底想用这些文件做什么?把大文件转换成十六进制然后保存。如果文件大小仅为150mb或更少,它就可以工作。将大文件转换为十六进制意味着什么?您是说要将文件转换为Base64字符串吗?为什么?好吧,我试过了。这是一个真正的救命稻草。但有一个小问题。完成后,它向一个33MB的文件添加了一个完整的mb。当我在一个200字节的小文本文件上尝试它时,它增加了4KB,文件末尾有3860个空间。我不知道出了什么问题。@areeghonaim有一个输入错误,应该是
outFile.Write(buffer,0,bytesRead)
检查edit@AreegGhonaim欢迎来到SO,请阅读这里嘿,我可以使用内存流吗?我想让这段代码根据可用的物理内存来执行缓冲区,这样如果内存中已经有更多的RAM,它的工作速度会更快?
FileStream
并使用4kb作为默认缓冲区大小,有一个重载构造函数允许指定缓冲区的大小,但很难说增加缓冲区大小是否会带来任何好处,需要进行基准测试以确定实际性能,请参见此处: