【问题标题】:C# File.ReadAllBytes() Only reads first 9k bytesC# File.ReadAllBytes() 只读取前 9k 字节
【发布时间】:2021-08-02 15:29:32
【问题描述】:

我一直在尝试逐字节读取文件,以便以后可以从我的单个 .exe 文件中创建它。 我试图读取该文件的单个字节并将 em 加载到字节数组中。 但是当我尝试使用这个程序阅读它们时

using System;
using System.IO;

namespace ok
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] buffer = null;
            using (FileStream fs = new FileStream(@"D:\Praca\programowanie\Visual Studio\C#\ok\ok\bin\Debug\net5.0\temp.docx", FileMode.Open, FileAccess.Read))
            {
                buffer = new byte[fs.Length];
                fs.Read(buffer, 0, (int)fs.Length);
            }

            for (int i = 0; i <= 13025; i++)
            {
                Console.WriteLine(buffer[i].ToString() + ",");
            }
        }

    }
}

它确实返回单个字节,但它只返回前 9000 个左右的字节,然后关闭程序。 有人能帮我一下吗? 如果需要,我很乐意提供更多详细信息

【问题讨论】:

  • 为什么是任意的13025
  • 旁白:如果可能,尽量避免将文件完全加载到内存中,尤其是当它们这么大的时候。您可以从流中逐位读取
  • byte[] buffer = File.ReadAllBytes("filename");?
  • 13025 是文件的大小。另外,您能否详细说明该流的逐位方法?我有兴趣
  • 不是分配一个足够大的缓冲区来容纳整个文件,而是分配一个缓冲区,例如1024 字节大,反复读入 1024 字节,然后将它们打印到控制台,然后重复......你甚至可以有一个 1 字节的缓冲区(所以读取 1 个字节,打印它,读取另一个字节,打印它,等等),它可能不会花费你太多的性能

标签: c# arrays byte


【解决方案1】:

抱歉,这是一个愚蠢的问题。 事实证明,它读得很好,但是 9000 是 CMD 窗口的大小限制。 我将只读取前 8500 个字节,然后手动添加它们。

【讨论】:

  • 你对输出做了什么?如果您将它们写入文件,那么您可以使用例如重定向MyConsoleApplication.exe &gt; SomeFile
猜你喜欢
  • 2013-06-23
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2011-07-01
  • 2012-10-04
  • 2014-04-23
相关资源
最近更新 更多