2011-02-07 58 views
2

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

现在我知道.dat文件的可能内容是什么,但不知道如何从中读取数据。我将不胜感激任何关于如何从这个.dat文件中提取所有数据的帮助。不要求用所有的代码勺子喂食,但如何去做这个步骤明智的指示将非常感激。

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

问候

编辑:打开.dat文件在写字板我得到如下:

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

+0

添加到观点寄发器它是二进制还是文本? – devnull 2011-02-07 16:32:49

+0

不知道文件格式,你必须非常幸运,或花费相当长的时间计算出来。 – Chris 2011-02-07 16:39:53

+0

添加了截图 – Shoaib 2011-02-07 16:42:18

回答

0

对于初学者来说,你”需要使用System.IO.File类。在本课程中,您可以通过几种不同的选项来了解如何阅读文件内容。最简单的方法可能是File.ReadAllText()File.ReadAllLines()

例如为:

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

或者:

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

一旦你的内存有内容,这是由你来解析和适当地处理它们。

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

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

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

编辑:在这里我们去

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

我认为字符串的长度不仅仅是一个字节,而是C#将字符串保存为二进制的方式,它可以做一些事情来表明有多少字节被使用,所以看那个。

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

相关问题