2009-09-24 6 views
0

Aujourd'hui, je coupe vidéo au travail (oui moi!), Et je suis tombé sur un format vidéo étrange, un format de fichier MOD avec un fichier MOI compagnon.Comment écrire un gestionnaire de format de fichier

J'ai trouvé ce article en ligne sur le wiki, et je voulais écrire un gestionnaire de format de fichier, mais je ne suis pas sûr de savoir comment commencer.

Je veux écrire un gestionnaire de format de fichier pour lire les fichiers d'information, est-ce que quelqu'un a déjà fait cela et comment commencer?

Edit:

Merci pour toutes les suggestions, je vais essayer ce soir, et je vais vous faire savoir. Les fichiers MOI ne sont pas très volumineux, peut-être 5KB au maximum (je ne les ai pas en face de moi).

+0

Examinez le fonctionnement de l'utilitaire Unix, en particulier en ce qui concerne le fichier "magique". La magie de l'homme vous donnera beaucoup d'informations. –

Répondre

3

Vous avez de la chance car le format MOI définit au moins la définition du fichier. Tout ce que vous devez faire est de lire dans le fichier et d'interpréter les résultats en fonction de la définition du fichier. Suivant la définition, vous devriez être capable de créer une classe qui pourrait lire et interpréter un fichier qui renvoie toutes les définitions de format de fichier en tant que propriétés dans leurs types respectifs.

La lecture du fichier est nécessaire d'ouvrir le fichier et généralement la lecture sur une progression octet par octet, tels que:

 using(FileStream fs = File.OpenRead(path-to-your-file)) { 
      while(true) { 
       int b = fs.ReadByte(); 
       if(b == -1) { 
        break; 
       } 
       //Interpret byte or bytes here.... 
      } 
     } 

Par la, il semble article de wiki référencé PDF, comme quelqu'un déjà ingénierie inverse Le format. Depuis le PDF, voici la première entrée dans le format suivant:

Hex-Address: 0x00 
Data Type: 2 Byte ASCII 
Value (Hex): "V6" 
Meaning: Version 

Ainsi, une mise en œuvre simpliste pourrait tirer les 2 premiers octets de données à partir du flux de fichiers et les convertir en ASCII, qui fournirait une valeur de propriété pour la version .

entrée suivante dans la définition du format:

Hex-Address: 0x02 
Data Type: 4 Byte Unsigned Integer 
Value (Hex): 
Meaning: Total size of MOI-file 

Interprétation des 4 octets suivants et la conversion à un unsigned int fournirait une valeur de propriété pour la taille du fichier MOI.

Espérons que cela aide.

0

Si les fichiers sont très grandes et ont juste besoin d'être diffusée en continu, je voudrais créer un nouvel objet de lecteur qui utilise un UnmanagedMemoryStream pour lire les informations.

Je l'ai fait beaucoup de traitement différent du format de fichier comme ça. Plus récemment, j'ai pris l'habitude de rendre beaucoup de mes lecteurs plus fonctionnels où la lecture a tendance à utiliser le 'rendement de rendement' pour retourner les objets en lecture seule du fichier.

Cependant, tout dépend de ce que vous voulez faire. Si vous essayez de créer un format général à utiliser dans d'autres applications ou de créer une API, vous souhaitez probablement vous conformer à une norme existante. Si toutefois vous voulez juste obtenir des données dans votre propre application, vous êtes libre de le faire comme bon vous semble. Vous pouvez utiliser un lecteur binaire sur le flux et construire les informations dont vous avez besoin dans votre application, ou demander au lecteur de renvoyer des objets représentant le contenu du fichier.

La seule chose que je recommanderais. Assurez-vous qu'il implémente IDisposable et vous l'envelopper dans une utilisation!

Questions connexes