Datei öffnen - ist codiert

Habre

Grünschnabel
Ich habe eine Datei aus einem Game, kann sie leider nciht richtig verwerten. Die Datei muss irgendwie zu öffnen sein und man müsste daraus bestimmte Informationen ziehen könne, wenn ich diese aber einfach mit einem Texteditor aufmache klappt da überhaupt nichts.
Ich würde gerne wissen, was es so für Möglichkeiten gibt die Datei vielleicht doch öffnen zu können?

Weitere Infos: Geht um das Spiel World of Warcraft. Erweriterung ist .wdb (Hat aber ncihts mit der Works DB denke ich zu tun). Habs mit dem Hex-Editor probiert werde daraus aber auch nicht schlau. Soweit ich weiß ist die Datei binär.

Es ist eine Art Datenbank.
Hier mal ein Code mit dem es möglich ist einen bestimmten Wert aus der Datei zu ziehen, vielleicht hilft er ja weiter, ist C# nehme ich an:

Code:
#include <stdio.h>
#include <string.h>

void PrintUsage(void)
{
	printf("DumpItemCache usage:  dumpitemcache <filename>\n");
	printf("  filename - path and filename of itemcache.wdb\n");
}

int freadstr(char *strOut, int maxLen, FILE *f)
{
	int retVal = 0;
	char c = 1;

	while (maxLen && c && c != EOF)
	{
		c = fgetc(f);
		if (c && c != EOF)
			strOut[retVal++] = c;
		maxLen--;
	}

	strOut[retVal] = 0;
	return retVal;
}

char *fixupitemname(char *itemname)
{
	static char retVal[1024];
	int src, dest;
	src = dest = 0;

	while (itemname[src])
	{
		if (itemname[src] == '"')
			retVal[dest++] = '\\';
		retVal[dest++] = itemname[src++];
	}
	retVal[dest] = 0;

	return retVal;
}

int main(int argc, char *argv[])
{
	FILE *fIn;
	char *fileName;
	int sig;
	int value;
	int recSize;
	char itemName[512];

	if (argc < 2) 
	{
		PrintUsage();
		return 1;
	}

	fileName = argv[1];

	if ((fIn = fopen(fileName, "rb")) == NULL)
	{
		printf("Could not open %s\n", fileName);
		return 1;
	}

	fread(&sig, 4, 1, fIn);
	if (sig != 0x57494442)
	{
		printf("Invalid file signature!\n");
		fclose(fIn);
		return 1;
	}

	printf("SellValues = {\n");

	fseek(fIn, 12, SEEK_CUR); 

	while (!feof(fIn))
	{
		if (fseek(fIn, 4, SEEK_CUR) != 0)  // unique item id
			break;
		if (fread(&recSize, sizeof(recSize), 1, fIn) != 1)
			break;
		if (fseek(fIn, 8, SEEK_CUR) != 0)
			break;

		freadstr(itemName, sizeof(itemName), fIn);

		// 3 more copies of itemname
		if (fseek(fIn, (int)(3 * (strlen(itemName) + 1)), SEEK_CUR) != 0)
			break;

		// more attributes
		if (fseek(fIn, 16, SEEK_CUR) != 0)
			break;

		if (fread(&value, sizeof(value), 1, fIn) != 1)
			break;

		if (value)
			printf("\t[\"%s\"] = %d,", fixupitemname(itemName), value);
		
		if (fseek(fIn, recSize - 8 - (4 * ((int)strlen(itemName) + 1)) - 16 - (int)sizeof(value), SEEK_CUR) != 0)
			break;
	}  /* while !feof */

	fclose(fIn);
	printf("\n}\n");

	return 0;
}

Meine Frage ist es wie ich es nun schaffe die Datei komplett zu öffnen und damit für mich lesbar zu machen. Bruache ich dazu ein bestimmtes Prog oder reicht mir auch schon ein bestimmter Code, der das ganze übersetzt?
 
Zurück