There seems to be a problem in the .Net CF 2.0 (and 1.0) regarding
random access files.
After several usages of FileStream.Seek and FileStream.Read, wrong
values are returned.
The code from this post demonstrates this problem:
http://groups.google.com/group/microsoft.public.dotnet.framework.compactframework/browse_thread/thread/cf5970f09c81d50d/727be7bd89798b3b?lnk=gst&q=filestream+bug#727be7bd89798b3b
//create the test file
using (FileStream stream = new FileStream(@"test.dat",
FileMode.Create))
{
for (int i = 0; i < 1000; ++i)
{
stream.WriteByte((byte)(i % 256));
}
}
// demonstrate issue
using
(
FileStream stream = new FileStream(
@"test.dat", FileMode.Open,
FileAccess.Read, FileShare.Read, 128
)
)
{
byte[] buffer = new byte[500];
stream.Read(buffer, 0, 252);
stream.Read(buffer, 0, 102);
stream.Read(buffer, 0, 5);
stream.Read(buffer, 0, 63);
stream.Read(buffer, 0, 39);
stream.Read(buffer, 0, 34);
stream.Read(buffer, 0, 73);
stream.Read(buffer, 0, 73);
stream.Read(buffer, 0, 73);
stream.Read(buffer, 0, 73);
long pos = stream.Position;
stream.Read(buffer, 0, 73);
MessageBox.Show("Position: " + pos.ToString() + ",
value: " + buffer[0].ToString()
,"Should show 19");
stream.Seek(pos, SeekOrigin.Begin);
stream.Read(buffer, 0, 73);
MessageBox.Show("Position: " + pos.ToString() + ",
value: " + buffer[0].ToString()
,"Should show 19, shows 1 instead");
}
Same code works fine on the desktop.
Is this a known bug or limitation?