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

Ptrtoptr 2014-12-10 05:13:40
C#
如题,就是因为有很多文件要读,有的很大,但我想读每个文件的头几个字节出来就够了,
所以,希望高手能给个运行快的代码!!!谢谢
...全文
532 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹风的兔子 2014-12-11
  • 打赏
  • 举报
回复
楼主,干得漂亮 —— 100分 可以 平分的。
Ptrtoptr 2014-12-11
  • 打赏
  • 举报
回复
引用 4 楼 shushukui 的回复:
文件流操作 using (System.IO.FileStream fs = new FileStream(path,FileMode.Open)) { byte trunk = new byte[100]; fs.Write(trunk,0,trunk.Length); } 读取前100个byte
引用 5 楼 github_22161131 的回复:

public static byte[] ReadBytes(string filePath, int n)
{
    using (var fs = File.OpenRead(filePath))
    using (var br = new BinaryReader(fs))
        return br.ReadBytes(n);
}
实在不好意思,两位大神的代码能完成任务,应该给两位大神各100分,可是没分了,实在不好意思!. 6楼的代码看起来更细心.就给6楼了,下次再送两个大神!sorry
吹风的兔子 2014-12-10
  • 打赏
  • 举报
回复
而且,内存 始终保持在 30M 以下。
吹风的兔子 2014-12-10
  • 打赏
  • 举报
回复
        /// <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的 电影,想 读取哪一段,就能读取 哪一段。
winnowc 2014-12-10
  • 打赏
  • 举报
回复

public static byte[] ReadBytes(string filePath, int n)
{
    using (var fs = File.OpenRead(filePath))
    using (var br = new BinaryReader(fs))
        return br.ReadBytes(n);
}
shushukui 2014-12-10
  • 打赏
  • 举报
回复
文件流操作 using (System.IO.FileStream fs = new FileStream(path,FileMode.Open)) { byte trunk = new byte[100]; fs.Write(trunk,0,trunk.Length); } 读取前100个byte
於黾 2014-12-10
  • 打赏
  • 举报
回复
用readline()读不行吗,只读一行 或者按二进制文件的形式读,长度自己定义
  • 打赏
  • 举报
回复
头几个字节 是怎么定义的?

System.IO.File.ReadAllBytes(path);
xian_wwq 2014-12-10
  • 打赏
  • 举报
回复
很大是多大呀,如果是几个G,看看这个 http://blog.csdn.net/keenweiwei/article/details/17021779
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧