保存二进制文件的一部分

时间:2018-09-20 23:18:45

标签: c# wpf binary-data

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

我认为这会将2.5兆字节的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();
    }

1 个答案:

答案 0 :(得分:1)

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

其他提示:

  1. 流是可抛弃的,因此最好将它们保留为using块中声明的局部变量(即对stream执行此操作)。
  2. 您不需要设置stream.Position = newposition;,因为这正是Seek所做的。