【问题标题】:How to read all bytes of a stream but the last 8如何读取流的所有字节,但最后 8 个字节
【发布时间】:2016-12-06 01:39:10
【问题描述】:

我有以下代码:

using (var fs = new FileStream(@"C:\dump.bin", FileMode.Create))
{
    income.CopyTo(fs);
}

income 是我需要保存到磁盘的流,问题是我想忽略最后 8 个字节并保存之前的所有内容。收入流是只读的,只能转发,因此我无法预测它的大小,并且由于发送的文件很大,我不想将所有流加载到内存中。

任何帮助将不胜感激。

【问题讨论】:

  • 您可能想尝试将其推入队列:读取可管理大小的块,将其推入队列,从队列中读取除 8 个字节外的所有字节,写入输出流,重复。
  • 你有示例代码吗?

标签: c# .net io stream bytestream


【解决方案1】:

也许(或者更确切地说可能)有一种更简洁的方法,但目前我的第一个想法是务实的:

using (var fs = new FileStream(@"C:\dump.bin", FileMode.Create))
{
    income.CopyTo(fs);
    fs.SetLength(Math.Max(income.Length - 8, 0));
}

写入后的文件长度是哪组。

【讨论】:

  • 对于像 4gb 这样的大文件可以吗?
  • 在谈到 4 GB 时,最初写入 8 个字节“太多”应该不是问题,并且从末尾修剪文件并不涉及文件的完全重写,因此从性能角度来看查看应该没问题。
  • @user3900456 这是从文件中删除最后几个字符的最有效的方法。 Look here.
猜你喜欢
  • 2021-04-03
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多