BinaryReader 返回正确的字符串,但缺少前三个字符

BinaryReader returns the correct string but misses the first three characters

提问人:Joelminer 提问时间:10/29/2022 最后编辑:Joelminer 更新时间:10/29/2022 访问量:47

问:

我编写了这段代码来从文件中读取。当它从文件中读取时,它会返回正确的字符串,但它不会保存前三个字符。该程序旨在令人满意地处理游戏中的保存文件。

   using System.Diagnostics;
   using System.IO;
   using System.Security.Cryptography.X509Certificates;
   using System.Text;

   namespace SatisfactorySaveParser
   {
        public class FSaveHeader
        {
            public int SaveHeaderVersion;
            public int SaveVersion;
            public int BuildVersion;
            public string MapName;
            public string MapOptions;
            public string SessionName;
            public int PlayedSeconds;
            public long SaveTimeStamp;
            public byte SessionVisibility;
            public int UnrealEngineVersion;
            public string ModMetadata;
            public int ModFlags;
            public string SaveIdentifier;

            public void Parse(FileStream stream, string filename)
            {
                BinaryReader reader = new BinaryReader(stream, Encoding.UTF8);
                int Length = filename.Length;

                SaveHeaderVersion = reader.ReadInt32();
                SaveVersion = reader.ReadInt32();
                BuildVersion = reader.ReadInt32();
                MapName = reader.ReadString();
                MapOptions = reader.ReadString();
                SessionName = reader.ReadString();
                ModFlags = reader.ReadInt32();
                PlayedSeconds = reader.ReadInt32();
                SaveTimeStamp = reader.ReadInt32();
                SessionVisibility = reader.ReadByte();
                UnrealEngineVersion = reader.ReadInt32();
                ModMetadata = reader.ReadString();
                ModFlags = reader.ReadInt32();
                SaveIdentifier = reader.ReadString();
            }
        }
    }

我尝试了二进制读取器类的不同方法,以及从文件中读取的不同方法。

c#

评论

1赞 rene 10/29/2022
听起来像是 BOM 的问题:stackoverflow.com/questions/5012167/......
1赞 Ray 10/29/2022
字符串需要对其长度进行编码。您的文件可能使用与 BinaryReader 的动态 1-5 字节前缀不同的编码。发布数据,并指出哪些字符串受到影响或所有字符串。
0赞 Julian 10/29/2022
字节顺序标记也是我的第一个想法。您可以像下面描述的那样剥离它:stackoverflow.com/questions/1317700/...
0赞 jmcilhinney 10/29/2022
文件是使用 ?如果没有,那就是你的问题。文档说“字符串以长度为前缀,一次编码为整数七位”。在这种情况下,您可能应该只使用 .BinaryWriterReadStringFileStream
0赞 Joelminer 10/29/2022
@jmcilhinney文件不是用它写的,谢谢你的信息,应该更仔细地查看文档,谢谢。

答: 暂无答案