C# 小弟我只要读取一个文件的前十来个字节的内容,为了效率,不要读多,读到byte[]里就好了,请教怎么处理,有代码的,能运行的给95至100分

C# 我只要读取一个文件的前十来个字节的内容,为了效率,不要读多,读到byte[]里就好了,请问怎么办,有代码的,能运行的给95至100分
本帖最后由 Ptrtoptr 于 2014-12-10 17:15:48 编辑
C# 
如题,就是因为有很多文件要读,有的很大,但我想读每个文件的头几个字节出来就够了,
所以,希望高手能给个运行快的代码!!!谢谢
------解决思路----------------------
文件流操作
using (System.IO.FileStream fs = new FileStream(path,FileMode.Open))
{
    byte trunk = new byte[100];
   fs.Write(trunk,0,trunk.Length);

}

读取前100个byte
------解决思路----------------------

public static byte[] ReadBytes(string filePath, int n)
{
    using (var fs = File.OpenRead(filePath))
    using (var br = new BinaryReader(fs))
        return br.ReadBytes(n);
}

------解决思路----------------------
        /// <summary>
        /// 获取指定文件的 字节片段
        /// </summary>
        public static byte[] GetFilePackageBytes(string fullPath, long offset, long bufferSize)
        {
            if (!File.Exists(fullPath)) return null;

            if (offset < 0) offset = 0;
            if (bufferSize < 0) bufferSize = long.MaxValue;

            const int PACKAGE_SIZE = 1024 * 8;

            using (FileStream myFs = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                myFs.Position = offset;
                long filePackageLength = Math.Min(bufferSize, myFs.Length - myFs.Position);
                byte[] bytes = new byte[filePackageLength];

                long readLength = 0;
                while (readLength < filePackageLength)
                {
                    long leaveLength = myFs.Length - myFs.Position;
                    long leaveLength2 = filePackageLength - readLength;
                    int byteLength = (leaveLength > (long)PACKAGE_SIZE) ? PACKAGE_SIZE : Convert.ToInt32(leaveLength);
                    byteLength = (leaveLength2 > (long)byteLength) ? byteLength : Convert.ToInt32(leaveLength2);

                    byte[] buffer = new byte[byteLength];
                    myFs.Read(buffer, 0, byteLength);

                    Array.Copy(buffer, 0, bytes, readLength, byteLength);
                    readLength = readLength + byteLength;

                    if (myFs.Position >= myFs.Length) break;
                }

                myFs.Close();
                return bytes;
            }
        }


调用: byte[] bytes = GetFilePackageBytes("D:\Test.rmvb",0,10);

测试过:4个 G的 电影,想 读取哪一段,就能读取 哪一段。