【问题标题】:Read file memory is too large读取文件内存太大
【发布时间】:2020-01-26 23:54:04
【问题描述】:

有没有办法在不占用太多内存的情况下读取文件?

我想删除文件上的一系列字节[]。然后将其保存到另一个路径。

using(FileStream sr = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using(BinaryReader br = new BinaryReader(sr))
    {
        abFile = new byte[(int)sr.Length];
        br.Read(abFile, 0, (int)sr.Length);
        br.Dispose();
    }
    sr.Dispose();
}

【问题讨论】:

  • 看看内存映射文件 - docs.microsoft.com/en-us/dotnet/api/…
  • 这真的归结为你在阅读中做什么?您需要字节数组中的整个文件吗?你对文件数据做了什么处理?
  • 项目 > 属性 > 构建选项卡,取消勾选“首选 32 位”。你不喜欢这样的代码。
  • “任何方式”? ——当然,当然有“任何方式”。你试过什么?正如其他人所提到的,内存映射文件是一些人采用的一种方法。您也可以按顺序处理文件的各个部分,一次一点点。由于您没有解释有关文件的任何内容,也没有解释为什么要一次将全部内容存储在内存中,也没有解释您已经尝试过什么来解决您的问题,因此不可能知道哪个答案对您有好处。这个问题太宽泛了。
  • 我还要指出:using 声明专门用于确保一次性物品的处置变得容易。根本没有理由在实际 using 语句块内的 using 语句的对象上调用 Dispose()

标签: c#


【解决方案1】:

有没有办法在不占用太多内存的情况下读取文件?

是的。

  • 打开源文件
  • 打开目标文件
  • 开始循环
  • 阅读几 kb
  • 写入几 kb,但跳过写入要省略的字节
  • 重复直到文件被完全写入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-29
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2023-04-09
    • 2021-06-29
    相关资源
    最近更新 更多