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

时间:2011-02-07 16:20:48

标签: c#

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

现在我知道.dat文件的可能内容是什么,但不知道如何从中读取数据。我将非常感谢有关如何从此.dat文件中提取所有数据的任何帮助。不要求用勺子喂所有代码,但是如何解决这个问题的逐步指示将非常感激。

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

此致

编辑:在wordpad中打开.dat文件我得到以下内容:

http://i.stack.imgur.com/kZ1OH.jpg

3 个答案:

答案 0 :(得分:3)

如果文件是您要解析字符串的文本文件,则可以使用StreamReader,如下所示:

using (var textFile = System.IO.File.OpenText("yourfile.dat"))
{
    string line = null;           
    while ((line = textFile.ReadLine()) != null)
    {
         // Parse line.
    }
}

如果您需要解析二进制格式,可以使用BinaryReader,如下所示:

    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
        }
    }

答案 1 :(得分:0)

对于初学者,您将需要使用System.IO.File课程。在此类中,您有几种不同的选项可用于如何读取文件内容。最简单的方法可能是File.ReadAllText()File.ReadAllLines()

E.g:

string contents = File.ReadAllText("MyFile.dat");

或者:

string[] contents = File.ReadAllLines("MyFile.dat");

一旦你有了内存中的内容,你可以自己解析并妥善处理它们。

编辑:处理文本文件时使用这两种方法。看起来您正在使用包含二进制数据的文件 - 请使用适当的方法,例如File.ReadAllBytes

答案 2 :(得分:0)

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

编辑:我们在这里

每个表都以[00 01 00 00 00 ff 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(字符串),4(外键),7(多值,可能是blob)。类型0有一个表示大小的字节,类型1没有任何东西,类型4有外键引用,类型7有我的情况下的System.Collections.ArrayList。之后,在数据开始之前还有一些信息,可能与密钥和/或默认值有关。然后最后每个表以[0b(11)]

结束

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

除非你想交出你的数据文件,否则我现在只能给你。