首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileStream读/写

FileStream读/写
EN

Stack Overflow用户
提问于 2012-08-09 04:51:33
回答 2查看 27.7K关注 0票数 2

好的,我正在写另一个程序,目的是操作二进制文件。这个程序导入的文件比我以前操作过的任何文件都要大,大约12K。

我很好奇Stream.read命令是如何工作的……我知道这听起来很基本,但是我怎么才能知道文件已经完全读取,这样我就可以开始操作它了,因为现在我有这个代码……

代码语言:javascript
复制
// Opens a stream to the path chosen in the open file dialog
using (FileStream stream = new FileStream(chosenFile, FileMode.Open, FileAccess.Read))                     
{
    size = (int)stream.Length; // Returns the length of the file
    data = new byte[size]; // Initializes and array in which to store the file
    stream.Read(data, 0, size); // Begins to read from the constructed stream
    progressBar1.Maximum = size;

    while (byteCounter < size)
    {
        int i = data[byteCounter];

        byteCounter++;
        progressBar1.Increment(1);
    } 
}

我知道这很简单,但是有人能给我解释一下stream.Read是如何工作的吗?它是不是把所有东西都存储到字节数组“数据”中,然后我就可以按我认为合适的方式操作它,或者我必须在读取文件的时候操作它。我再次道歉,如果这是基本的,所有的想法是感激的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-09 04:54:45

这一行

代码语言:javascript
复制
stream.Read(data, 0, size); 

从流中读取所有内容,并将文件内容存储在字节数组中

您可以立即开始在阵列上工作。

请参阅MSDN上的FileStream.Read文档

您的代码读取文件的长度,分配一个大小正确的字节数组,然后一次性读取所有内容。

当然,如果你的文件真的很大,这种方法是不可行的。

(与可用内存相比,“大”的定义可能会有所不同)。在这种情况下,使用的方法是读取文件的块,处理和循环,直到读取所有字节。

但是,DotNet有专门的类用于读取和写入二进制文件。

请参阅BinaryReader上的文档

票数 7
EN

Stack Overflow用户

发布于 2012-08-09 05:14:27

这并没有确切地回答您关于Stream.Read如何工作的问题,但是说明了您想要的东西已经存在于.Net中这一事实。

对于12K的文件,File.ReadAllBytes可以正常工作。

代码语言:javascript
复制
byte[] content = File.ReadAllBytes("path");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11872972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档