【发布时间】: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 个字节,打印它,读取另一个字节,打印它,等等),它可能不会花费你太多的性能