首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从二进制文件c#中读取整型数组

如何从二进制文件c#中读取整型数组
EN

Stack Overflow用户
提问于 2013-02-09 21:34:48
回答 2查看 11.8K关注 0票数 0

我有以下代码:

代码语言:javascript
复制
LZW lzw = new LZW();
int[] a = lzw.Encode(imageBytes);

FileStream fs = new FileStream("image-text-16.txt", FileMode.Append);
BinaryWriter w = new BinaryWriter(fs);

for (int i = 0; i < a.Length; i++)
{
   w.Write(a[i]);

}

w.Close();
fs.Close();

如何从文件中读取数组元素?我尝试了几种方法。例如,我将数组的长度写入文件,并尝试读取数字。然而,我失败了。

请注意。我需要获取int数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-09 21:36:28

你在找这个吗:

代码语言:javascript
复制
var bytes = File.ReadAllBytes(@"yourpathtofile");

或者更像这样的东西:

代码语言:javascript
复制
        using (var filestream = File.Open(@"C:\apps\test.txt", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            for (var i = 0; i < arraysize; i++)
            {
                Console.WriteLine(binaryStream.ReadInt32());
            }
        }

或者,一个包含单元测试的小示例:

创建一个包含整数的二进制文件...

代码语言:javascript
复制
    [Test]
    public void WriteToBinaryFile()
    {
        var ints = new[] {1, 2, 3, 4, 5, 6, 7};

        using (var filestream = File.Create(@"c:\apps\test.bin"))
        using (var binarystream = new BinaryWriter(filestream))
        {
            foreach (var i in ints)
            {
                binarystream.Write(i);
            }
        }
    }

和一个读取二进制文件的小示例测试

代码语言:javascript
复制
    [Test]
    public void ReadFromBinaryFile()
    {
        // Approach one
        using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            var pos = 0;
            var length = (int)binaryStream.BaseStream.Length;
            while (pos < length)
            {
                var integerFromFile = binaryStream.ReadInt32();
                pos += sizeof(int);
            }
        }
    }

另一种读取二进制文件的方法

代码语言:javascript
复制
    [Test]
    public void ReadFromBinaryFile2()
    {
        // Approach two
        using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            while (binaryStream.PeekChar() != -1)
            {
                var integerFromFile = binaryStream.ReadInt32();
            }
        }
    }
票数 7
EN

Stack Overflow用户

发布于 2013-02-09 21:53:27

我会说另一种方式。唯一的问题是你在阅读它之前不知道它的大小,所以先计算它。哦,我会用'using‘来确保事物被正确地处理(和关闭):

代码语言:javascript
复制
        int[] ll;
        using (FileStream fs = File.OpenRead("image-text-16.txt"))
        {
            int numberEntries = fs.Length / sizeof(int);
            using (BinaryReader br = new BinaryReader(fs))
            {
                ll = new int[numberEntries];
                for (int i = 0; i < numberEntries; ++i)
                {
                    ll[i] = br.ReadInt32();
                }
            }
        }
        // ll is the result

我真的不明白的是为什么你要用LZW写一个int[],但我想这是有原因的……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14788722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档