Эта строка неверна:
using (FileStream fs = File.Create("tempfile.dat"))
Вызывает создание нового файла для каждого считанного блока.Вам нужно переместиться выше того места, где вы впервые читаете из потока.
Кроме того, условие if(stream.Position > limit)
будет по-прежнему true
после первого чтения, поскольку позиция должна быть точно на значение limit
.
Вы, вероятно, хотите что-то более похожее на это:
public static FileStream stream = new FileStream(@"isam.dat", FileMode.Open, FileAccess.Read);
public static FileStream shortFile = null;
const int limit = 10000;
public MainWindow()
{
byte[] block = new byte[limit];
using (FileStream fs = File.Create("tempfile.dat"))
{
while (stream.Read(block, 0, limit) > 0 && stream.Position <= limit)
{
fs.Write(block, 0, block.Length);
}
}
InitializeComponent();
}
или даже на это:
public static FileStream stream = new FileStream(@"isam.dat", FileMode.Open, FileAccess.Read);
public static FileStream shortFile = null;
const int limit = 10000;
public MainWindow()
{
byte[] block = new byte[limit];
using (FileStream fs = File.Create("tempfile.dat"))
{
int bytes = stream.Read(block, 0, limit);
if (bytes > 0)
{
fs.Write(block, 0, bytes);
}
}
InitializeComponent();
}