begin process at 2012 02 10 02:14:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > LECTURE D'UN FICHIER PAK UTILISER DANS QUAKE

LECTURE D'UN FICHIER PAK UTILISER DANS QUAKE


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :24/01/2002 Date de mise à jour :24/01/2002 22:03:27 Vu / téléchargé :6 045 / 133

Auteur : zorque

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

DECOMPRESSER LE FICHIER TEST.PAK SUR C:\

ce programme vous donne la liste des fichier present dans un fichier pak
sa marche pour quake et quake 2 j'ai pas essayer avec quake 3
cinon pour extraire les fichier chercher un peux s'est pas compliquer ;)

Source

  • #include <iostream.h>
  • #include <stdio.h>
  • struct PAK_HEADER
  • {
  • unsigned int Offset;
  • unsigned int Length;
  • };
  • struct PAK_FILE
  • {
  • char Titel[56];
  • unsigned int Offset;
  • unsigned int Length;
  • };
  • typedef unsigned char* BYTEADD;
  • unsigned int m_NumberOfFiles, m_CurrentFileLength;
  • int main()
  • {
  • PAK_HEADER pakH;
  • PAK_FILE *pakF;
  • FILE *mFile;
  • // recherche les fichies present dans le pak
  • mFile = fopen("c:\\test.pak", "rb");
  • if( mFile == 0 )
  • return false;
  • if( fseek( mFile, 4, SEEK_SET ) )
  • return false;
  • if( ! fread( &pakH, sizeof( pakH ), 1, mFile ) )
  • return false;
  • m_NumberOfFiles = pakH.Length/ 64;
  • cout << "nombre de fichier dans le PAK : " << m_NumberOfFiles;
  • pakF = new PAK_FILE[ m_NumberOfFiles ];
  • if( fseek( mFile, pakH.Offset, SEEK_SET ) )
  • return false;
  • if( ! fread( pakF, pakH.Length , 1, mFile ) )
  • return false;
  • // affiche les fichier trouver avec leur taille et leur position
  • unsigned int count;
  • for(count =0; count <= (m_NumberOfFiles - 1); count++)
  • {
  • cout << "\n"
  • << count
  • << ": "
  • << pakF[count].Titel
  • << " demarre a l'offset : "
  • << pakF[count].Offset
  • << " et mesure : "
  • << pakF[count].Length
  • << " bytes";
  • }
  • cout << "\n\n";
  • fclose(mFile);
  • return 0;
  • }
#include <iostream.h>
#include <stdio.h>

struct PAK_HEADER
{
	unsigned int  Offset;
	unsigned int  Length;
};

struct PAK_FILE 
{
	char 			Titel[56];
	unsigned int 	Offset;
	unsigned int	Length;
};

typedef unsigned char* BYTEADD;
unsigned int m_NumberOfFiles, m_CurrentFileLength;

int main()
{
	PAK_HEADER	pakH;
	PAK_FILE	*pakF;
	FILE *mFile;

	// recherche les fichies present dans le pak

	mFile = fopen("c:\\test.pak", "rb");

	if(  mFile == 0 )
		return false;

	if( fseek( mFile, 4, SEEK_SET ) )
		return false;
	
	if( ! fread( &pakH, sizeof( pakH ), 1, mFile )  )
		return false;
	
	m_NumberOfFiles = pakH.Length/ 64;

	cout << "nombre de fichier dans le PAK : " << m_NumberOfFiles;

	pakF = new PAK_FILE[ m_NumberOfFiles ];
	
	if( fseek( mFile, pakH.Offset, SEEK_SET ) )
		return false;
		
	if( ! fread( pakF, pakH.Length , 1, mFile ) )
		return false;

	// affiche les fichier trouver avec leur taille et leur position
	unsigned int count;

	for(count =0; count <= (m_NumberOfFiles - 1); count++)
	{
		cout << "\n" 
			 << count 
			 << ": " 
			 << pakF[count].Titel
			 << " demarre a l'offset : " 
			 << pakF[count].Offset
			 << " et mesure : "
			 << pakF[count].Length
			 << " bytes";
	}

	cout << "\n\n";
	fclose(mFile);

	return 0;
} 


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • test.pakTélécharger ce fichier [Réservé aux membres club]113 964 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip INFORME DE LA CAPACITER DES DISQUES DURS(INTERFACE WIN32)
NOUVELLE VERSION CHERCHE LES LECTEURS

 Sources de la même categorie

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel
Source avec Zip COPIE DE FICHIERS PAR RESEAU LOCAL par cczerty

Commentaires et avis

Commentaire de Croqmort le 25/01/2002 11:22:03

les fichiers presents dans les fichiers pak sont-ils compressés par un algo LZW ?

Commentaire de zorque le 25/01/2002 13:11:25

non y'a pas de compression mais je croie ke pour quake 3 il on appliquer une compression
mais il est possible de compresser les fichier dans le pak :)

Commentaire de Sardinoman le 11/01/2003 13:09:11

Alors la je voulai vraimment te remercier...
Je suis vraimment un kiki en opérations sur fichiers et je comprenais pas tous ces signes bizarres dans les fichiers proprietaires.
Mais je voulais savoir : est ce ke tu sais comment faire un programme pour ecrire des .pak ? C le meme principe ?

Commentaire de plex le 05/07/2003 13:31:17

C'est trés facile il suffit d'ouvrir le pak winzip et tu as tout !!

Commentaire de dindin2000 le 03/08/2003 23:34:35

hein ? Qu'est ce que tu dis Plex ? J'ai pas compris ? Moi aussi je voudrais savoir comment on fait un pak :)

Commentaire de Clem le 08/07/2005 20:49:41

faudrait sortir une classe pour les pak ;)
sinon, ceux de quake 3 c'est des "pk3", en fait de simples zip renomés.
si ça interesse quelqu'un dans nexuiz (==> google.fr. c'est un fps open source dans le genre quake 3) il y a un exemple complet vu que ce jeu les lis, c'est dans fs.c, rien de bien compliqué (enfin bien plus que lire un simple pak, y a plus d'un millier de lignes de code, et encore sans compter la zlib)

Commentaire de cyfive le 29/07/2006 05:56:56

Je trouve ta source très bien zorque.
C'est pourquoi j'ai décidé de faire une classe(objet)
permettant de lire/créer des fichiers pak.
Toutefois, n'étant pas adepte des produits de programmation
Microsoft je vais le faire avec Borland C++ Builder.

Commentaire de cyfive le 30/07/2006 02:58:41

J'ai fini ma classe, mais je ne peux pas extraire les fichiers de ton pak. La raison est simple, la structure de l'en-tête réelle est:

struct PACK_HEADER
{
   unsigned int ident;
   unsigned int dirofs;
   unsigned int dirlen;
};

En effet, la structure des répertoire est conservée.

Si y a des intéressé, ma classe crée/lit/extrait des fichiers pak mais en utilisant la structure de zorque et non la vrai. Ca peut être pratique si vous garder tout dans un répertoire et en plus vous pouvez soit extraire en mémoire ou sur le disque dur.

Adresse de la vraie structure(en VB): http://francis.dupont.free.fr/coindev/direct3d/pak.htm

Commentaire de cyfive le 30/07/2006 07:50:04

Désolé, je viens de remarquer que tu commencais à l'offset 4 dans ton code. De plus, ce sont 4 octets qui forment l'identité du fichier. En effet ce sont les lettres "PACK".

J'ai pu voir qu'il y avait 10 fichiers dans ce pack. Maintenant, tout marche. Mais, le seul hic, c'est que si les répertoires inscrits dans les noms des fichiers du pack n'existe pas rien ne sera fait pour le fichier en question. Donc, il faut s'assurer avant tout que les répertoires existent et si non les créer.

Je vais mettre la source de ma classe sur le forum sous peu. :)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales