无法读取空字节的文件?

时间:2011-05-05 19:09:54

标签: c# file-io null

嘿伙计们我正在尝试读取此文件,该文件具有空字节(00十六进制),有点像填充。每当我尝试读取它停在第一个空字节(00十六进制)的文本时,是否有人知道如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您必须将其作为二进制数据读取,然后在此链接处使用少量指令来处理字节数据。 Removing trailing nulls from byte array in C#

答案 1 :(得分:1)

答案 2 :(得分:0)

以下是使用FileReadAllBytes读取其他"文本"的示例。包含十六进制00空值以及其他特殊字符的文件。

背景:来自Paradox和Delphi的旧版Borland数据库引擎有一个配置文件,名为IDAPI.CFG或IDAPI32.CFG。该文件主要是普通文本,但也包含ASCII字符0(null)到4.我需要读取此文件以确定" NET DIR"的当前值。设置,并跳过空值。

方法: 1)将文件作为字节流读取,在一个大(或小)gulp中读入一个字节数组。重要的声明是 byte[filecontents] = File.ReadAllBytes(fileName).

2)读取并处理字节数组中的每个字符。对于每个角色...... *如果为null,请忽略它 *如果其他所选字符(ASCII 01至04)忽略它或转换为表示其功能的不同字符,例如NewLine或等号。 *如果是其他(例如可显示的)ASCII字符,则将字节转换回字符形式并附加到输出字符串构建器。执行此操作的代码行是textOut.Append((char)fileByte)

        private string GetBDEConfigText(string fileName)
    {
        StringBuilder textOut = new StringBuilder();
        byte[] fileContents = File.ReadAllBytes(fileName);
        foreach (byte fileByte in fileContents)
        {
            switch (fileByte)
            {
                case 0:
                    {
                        // Leave unchanged, strip out binary character
                        break;
                    }
                case 1:
                    {
                        // Leave unchanged, strip out binary character
                        break;
                    }
                case 2:
                    {
                        break;
                    }
                case 3:
                    {
                        textOut.Append(Environment.NewLine);
                        break;
                    }
                case 4:
                    {
                        textOut.Append('=');
                        break;
                    }
                default:
                    {
                        textOut.Append((char)fileByte);
                        break;
                    }
            }
        }
        return textOut.ToString();
    }