小文件的crc我可以先把文件读入到byte[]中,然后调用Crc(buffer, 0, buffer.Length);方法就可以得到需要的crc,但是对于特别大的文件,把打的文件读入内存中根本不现实,着急的等待您的答案。

解决方案 »

  1.   

    为什么要完全读出来呢,即使是crc,也是固定长度的算法,你可以每次读一部分数据,进行crc计算处理,然后再取,再处理,……,直至结束,然后看看你算出的crc值与存在结尾的值是否一样,如果一样,证明是正确的;否则是错误。FileReader支持读固定长度的数据。
      

  2.   

    对阿,你只要对传送的内容进行crc校验就行了
      

  3.   

    存crc的目的不就是为了进行校验吗,那么根据一定算法而算出来的,这个值不就是为了来判断数据是否有效,一般这个值不就是存在结尾吗(当然也可能存在其他地方)。
      

  4.   

    to 存在结尾的值 是什么东西,多谢了。你首先要了解你所使用的crc算法,要不然无法做了。
      

  5.   

    举个简单crc例子
    // Create crc byte 
    private byte GetCrc( byte[] bData )
    {
        const byte bBase = 0xFF;
        byte bReturn = bBase;
        if( bData.Length > 0 )
        {
             for( int i = 0; i < bData.Length; i++ )
                bReturn ^= bData[i];
         }
         return bReturn;
    }// Check data in crc byte
    private bool CheckData( byte[] bData )
    {
        const byte bBase = 0xFF;
        byte bReturn = bBase;
        if( bData.Length > 0 )
        {
             for( int i = 0; i < bData.Length - 1; i++ )
                bReturn ^= bData[i];
             if( bReturn == bData[i] )
                return true;
         }
         return false;
    }
      

  6.   

    不要全读,读定长的buffer来处理
      

  7.   

    我要做的东西是把一个大文件差分成小包发送给对方,每个包有自己的crc,整个文件有自己的crc,对方接受后,验证每个小包的crc,所有的包验证无误后,在重组文件,对方再计算整个文件的crc,然后跟我这里的crc比较,如果整个文件的crc也相同,表示传输正确,否则重传。小包的crc容易得到。大文件的crc如何得到。谢谢了。