Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理由另一个应用程序创建的.dat文件_C# - Fatal编程技术网

C# 处理由另一个应用程序创建的.dat文件

C# 处理由另一个应用程序创建的.dat文件,c#,C#,我需要编写一个应用程序,它使用另一个应用程序创建的.dat文件中存储的数据。基本上,创建.dat的应用程序是一个从在线游戏中收集信息并存储信息的免费应用程序。它还对数据进行一些处理。我计划做的是创建一个团队工具,利用存储的数据,并利用我们的个人游戏知识进行进一步处理 现在我知道了.dat文件的可能内容,但不确定如何从中读取数据。如果您能帮助我从这个.dat文件中提取所有数据,我将不胜感激。不要要求所有的代码都是填鸭式的,而是关于如何进行的分步指导,这将是非常感激的 如果您需要任何进一步的信息,请

我需要编写一个应用程序,它使用另一个应用程序创建的.dat文件中存储的数据。基本上,创建.dat的应用程序是一个从在线游戏中收集信息并存储信息的免费应用程序。它还对数据进行一些处理。我计划做的是创建一个团队工具,利用存储的数据,并利用我们的个人游戏知识进行进一步处理

现在我知道了.dat文件的可能内容,但不确定如何从中读取数据。如果您能帮助我从这个.dat文件中提取所有数据,我将不胜感激。不要要求所有的代码都是填鸭式的,而是关于如何进行的分步指导,这将是非常感激的

如果您需要任何进一步的信息,请询问

问候

编辑:在写字板中打开.dat文件,我得到以下信息:


对于初学者,您需要使用该类。在这个类中,您可以使用几个不同的选项来读取文件内容。最简单的方法可能是或

例如:

或:

一旦将内容存储在内存中,就要由您对其进行适当的解析和处理


编辑:在处理文本文件时使用这两种方法。看起来您正在使用一个包含二进制数据的文件--请改用类似的适当方法。

如果该文件是一个文本文件,您希望在其中解析字符串,则可以使用
StreamReader,如下所示:

using (var textFile = System.IO.File.OpenText("yourfile.dat"))
{
    string line = null;           
    while ((line = textFile.ReadLine()) != null)
    {
         // Parse line.
    }
}
    using (var dataFile = new System.IO.BinaryReader(System.IO.File.OpenRead("yourfile.dat")))
    {
        try
        {
            // Parse your data file according to the known format.
            dataFile.ReadBoolean();
            dataFile.ReadInt32();
            // ...and so on.
        }
        catch(System.IO.EndOfStreamException e)
        {
            // Handle trying to read past the end of the stream
        }
    }
如果需要解析二进制格式,可以使用
二进制读取器
,如下所示:

using (var textFile = System.IO.File.OpenText("yourfile.dat"))
{
    string line = null;           
    while ((line = textFile.ReadLine()) != null)
    {
         // Parse line.
    }
}
    using (var dataFile = new System.IO.BinaryReader(System.IO.File.OpenRead("yourfile.dat")))
    {
        try
        {
            // Parse your data file according to the known format.
            dataFile.ReadBoolean();
            dataFile.ReadInt32();
            // ...and so on.
        }
        catch(System.IO.EndOfStreamException e)
        {
            // Handle trying to read past the end of the stream
        }
    }

这绝对是一个二进制文件。这是某种序列化的对象列表。如果你能把它上传到某个地方,让我看看内容,我可以为你指出正确的方向。所有这些方块都是对解码器有意义的数字。在谷歌上搜索一个名为XVI32的程序,它是一个十六进制编辑器,可以让你更好地了解文件中的内容。其中一些数字涉及字符串长度等内容,或者是System.Int32文本所指的实际数字。你从写字板上得不到任何有价值的东西

编辑:我们开始了

每个表格都以
[00 01 00 00 00 ff ff ff]
和更多数字开头,然后是标题文本

[3e (62)]"go, Version=2.9.20.22362, Culture=neutral, PublicKeyToken=null"
这里有更多的数字

[TableNameLength(byte)][TableName][NumFields(int)]
{[FieldNameLength][FieldName]}*NumFields
{[FieldType(byte)]}*NumFields
{[ExtraInfo]}*NotAllNumFields
额外的信息很棘手。这取决于类型。我可以看到的类型有:0(int)、1(string)、4(外键)、7(多值,可能是blob)。在我的例子中,类型0有一个字节指示大小,类型1没有任何内容,类型4有外键引用,类型7有System.Collections.ArrayList。在这之后,在数据开始之前还有一些信息,可能与键和/或默认值有关。最后,每个表以[0b(11)]

我认为字符串的长度不仅仅是一个字节,而是将字符串保存为二进制的C#方式,它可以显示使用了多少字节,所以请注意


这就是我现在能给你的全部,除非你想交出你的数据文件。

谢谢,我会试试这个,看看它是如何工作的。不过有一件事,就像我在OP中说的,我不确定.dat文件的格式。在wordpad中打开文件时,我会看到以下内容(仅顶部几行):文件格式不应影响读取文件内容。它可能会影响内容的处理/解析,但这是另一个问题。@甜甜圈:可能二进制/文本会对文件的读取方式产生影响…@Shoaib您必须使用反复试验来确定格式,或者向应用程序的作者询问有关文件格式的信息。如果您能告诉我们您可能会在哪个游戏中找到您需要的信息。如果它包含\0个字符,可能会影响文本阅读,不是吗?您能提供有关文件格式的详细信息吗?它是二进制的还是文本的?不知道文件格式,你要么非常幸运,要么花相当多的时间弄清楚。我同意其他克里斯的观点。尝试与输出该文件的应用程序的开发人员交谈,他们可能愿意向您提供该文件规范。我假设它是由游戏社区编写的,如果他们能从中获得另一个很酷的工具,他们通常非常愿意与您分享。我会尝试一下,并让您知道Andreas。谢谢你的帮助。好的,我找到了你说的程序,并查看了默认的tracks.dat文件。每个字符串都以一个字节开始,表示其长度,且不以null结尾。如果它以“go.”开头,它就是一个表,有两个实例。第一个包含有关表内容的某种信息,第二个包含一个32位整数,表示列数,每个列前面有一个字节,表示名称中的字符数。([8]“go.Track”[11 00 00(17列)][4]“name”[6]“number”等)后面可能是关于字段的信息,然后是数据