繁体   English   中英

保存二进制文件的一部分

[英]Save a portion of a binary file

我研究了如何将大文件读为小文件,但前提是要从头开始。 我希望能够从中间读到任意一点。 我意识到这听起来很疯狂,但我有我的理由。 当我将位置设置为大于0时,由于某种原因,我什么都没写出来。 我将得到一个充满空值的文件。

我以为这将从2.5MB中读取300K到文件中。

    public static FileStream stream = new FileStream(@"file.dat", FileMode.Open, FileAccess.Read);
    public static FileStream shortFile = null;
    int limit = 300000;
    public MainWindow()
    {
        byte[] block = new byte[limit];


        using (FileStream fs = File.Create("tempfile.dat"))
        {
            var newposition = stream.Seek(2500000, SeekOrigin.Begin);
            stream.Position = newposition;
            while (stream.Read(block, 0, limit) > 0 && stream.Position <= limit)
            {
               fs.Write(block, 0, block.Length);
            }
        }

        InitializeComponent();
    }

您已经说过: “我认为这会将2.5兆字节的300K读入文件中” 但您有limit ,而Seek则反之。 搜索位置需要设置为300000; limit应为2500000。

其他提示:

  1. 流是一次性的,因此最好将其保留为局部变量,在using块时声明(即对stream )。
  2. 您不需要设置stream.Position = newposition; 因为那是Seek刚刚做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM