FileStream.Read() 不适用于 c# 中大于 0 的偏移量



我正在用 c# 开发文件传输系统。客户端将文件读入分区,并将每个分区发送到服务器。

每个分区为 4096 字节,最后一个分区除外,该分区是其余字节。数据通过 TCP 套接字发送。

问题出在FileStream.Read()函数中,因为每当偏移量大于 0 时,该函数都会引发System.ArgumentException。这是代码:

string fileSize = "0";
FileStream f = null;
try
{
    f = File.Open(path, FileMode.Open, FileAccess.Read);
    fileSize = f.Length.ToString();
}
catch (Exception e)
{ }
// send partition count to server
int partitionCount = int.Parse(fileSize) / 4096;
int lastPartitionSize = (int.Parse(fileSize) - (partitionCount * 4096));
Thread.Sleep(20);
sendData(partitionCount.ToString());
Thread.Sleep(20);
sendData(lastPartitionSize.ToString());
Thread.Sleep(20);
for (int i = 0; i < (partitionCount); i++)
{
    byte[] data = new byte[4096];
    int offset = (4096 * i);
    Console.WriteLine("Partition: " + (i+1) + "  |  Offset: " + offset + "  |  Bytes Left: " + (f.Length - (4096*i)));
    f.Read(data, offset, 4096); // problem is RIGHT HERE
    sendRawData(data);
}
byte[] lastData = new byte[lastPartitionSize];
f.Read(lastData, (4096 * partitionCount), lastPartitionSize);
sendRawData(lastData);

从 MSDN:

抵消

数组中将放置读取字节的字节偏移量。

所以你的偏移量应该始终为零

最新更新