-1

我目前正在为我玩的游戏开发演示文件解析器。我一直在查看 PHP 中给出的格式和示例(试图将其转换为 C#),但它使用 fgetc,据我所知,它在 C# 中不可用,只有 C++ 可用。有什么想法可以解决这个问题吗?我试过使用StreamReader.Read()但它不喜欢空值。

如果有人想查看完整的脚本以更好地了解我想要实现的目标,可以在此处找到该示例。

谢谢!

4

1 回答 1

2

您需要使用BinaryReader来读取该文件。要阅读int,可以打电话ReadInt32。要读取它们的字符串,您需要逐字节读取ReadByte并与 0 进行比较。

using (var fs = File.OpenRead(filename))
{
    using (var reader = new BinaryReader(fs))
    {
        // reading happens here
    }
}

私有字符串 ReadString(BinaryReader reader) { byte b; StringBuilder sb = new StringBuilder(); while ((b = reader.ReadByte()) != 0) { sb.Append((char)b); } 返回 sb.ToString(); }

我在转换代码时犯了一个错误。文件格式表明该字符串的长度为 260 个字符。因此,您需要读取 260 个字节,然后修剪字符串,如下所示:

private string ReadString(BinaryReader reader, int length = 260)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < length; ++i)
    {
        byte b = reader.ReadByte();
        sb.Append((char)b);
    }
    return sb.ToString().Trim();
}

要阅读标题,您可以编写:

string hldemo = ReadString(reader, 8);

并读取主机名,例如,它将是:

string host = ReadString(reader);

我认为这几乎是 php 代码的完全相同的副本。有关其他字符串长度,请参阅格式文档,并查看它们的示例代码。我可能错过了什么。

于 2013-08-01T16:13:07.640 回答