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