Сохранить часть двоичного файла - PullRequest
0 голосов
/ 21 сентября 2018

Я решил, как читать большой файл в файл меньшего размера, но только если я начну с самого начала.Я хотел бы иметь возможность читать от середины до произвольной точки.Я понимаю, это звучит безумно, но у меня есть свои причины.Я не получаю ничего записанного в файл, когда я по какой-то причине устанавливаю позицию больше 0.В итоге я получу файл, полный значений NULL.

Я думал, что в файл будет записано 300 КБ из 2,5 МБ.

    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 голосов
/ 21 сентября 2018

Вы сказали "Я думал, что это будет читать 300K из 2,5 МБ в файл" ;но у вас есть limit и значения Seek наоборот.Положение поиска должно быть установлено на 300000;limit должно быть 2500000.

Другие советы:

  1. Потоки одноразовые, поэтому лучше хранить их как локальные переменные, объявленные в блоках using (т.е. сделать это для stream).
  2. Вам не нужно устанавливать stream.Position = newposition;, поскольку это то, что только что сделал Искатель.
...