作者tomex (tomex_ou)
看板C_Sharp
标题Re: [问题] 请问关於readblock的疑问
时间Sun Mar 12 20:47:21 2006
※ 引述《miewQ (ICQ)》之铭言:
: 在读取档案用readblock,可以固定读出某个特定size。
: 但是我发现我遇到一个问题,我读出来的size与档案实际大小的size有差。
: do
: {
: bytes=readAdapter.ReadBlock(str,0,1000);
: Console.WriteLine("{0}",bytes);
: total+=bytes;
: }
: while(bytes==1000);
我查了一下msdn对於ReadBlock的回传值:
The number of characters that have been read. The number will be less than or
equal to count, depending on whether all input characters have been read.
至少说明了回传值(number)"有可能"小於指定读取数(count)
原因可能是io忙碌delay到传得慢,或其他因素
因此上述写法虽然很合乎逻辑,但却忽略了硬体disk操作的忙碌因素
造成提早跳出的可能。
建议改采while(bytes>0)的作法,是比较保险的。
另外,你的buffer空间尽量可设成os最小的磁碟切割数
例如ntfs最小是4kb(4096),用它当作buffer大小比较合宜。
毕竟,对电脑而言,2的n次方是比较不需要再裁切的呀... :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.20.171