ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 从驱动器中读取大部分文件

2019-05-31 08:54:12  阅读:183  来源: 互联网

标签:c file data-access


我正在使用C#中的大文件(可以达到可用内存的20%-40%),我只需要将一小部分文件一次加载到内存中(比如1-2%的文件) ).我在想使用FileStream是最好的选择,但是idk.我需要给出一个起点(以字节为单位)和一个长度(以字节为单位)并将该区域复制到byte []中.可能需要在线程之间共享对文件的访问,并且该文件将位于文件中的随机位置(非线性访问).我也需要快速.

该项目已经有不安全的方法,所以请随意从C#更危险的一面提出建议

解决方法:

FileStream将允许您搜索所需文件的部分,没问题.这是在C#中使用它的推荐方法,而且速度很快.

线程之间共享:您需要创建一个锁,以防止其他线程在您尝试从中读取时更改FileStream位置.最简单的方法:

//  This really needs to be a member-level variable;
private static readonly object fsLock = new object();

//  Instantiate this in a static constructor or initialize() method
private static FileStream fs = new FileStream("myFile.txt", FileMode.Open);


public string ReadFile(int fileOffset) {

    byte[] buffer = new byte[bufferSize];

    int arrayOffset = 0;

    lock (fsLock) {
        fs.Seek(fileOffset, SeekOrigin.Begin);

        int numBytesRead = fs.Read(bytes, arrayOffset , bufferSize);

        //  Typically used if you're in a loop, reading blocks at a time
        arrayOffset += numBytesRead;
    }

    // Do what you want to the byte array and return it

}

根据需要添加try..catch语句和其他代码.无论你到哪里访问这个FileStream,都要锁定成员级变量fsLock …这会阻止其他方法在你试图读取时读取/操作文件指针.

速度方面,我认为你会发现你受到磁盘访问速度的限制,而不是代码.

您将不得不考虑有关多线程文件访问的所有问题…谁初始化/打开文件,谁关闭它等等.有很多理由可以覆盖.

标签:c,file,data-access
来源: https://codeday.me/bug/20190531/1188311.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有