Supprimer plusieurs octets séparés d'un fichier binaire ? - C++ - Programmation
Marsh Posté le 20-08-2007 à 03:48:30
Re
J'allais oublier ...
C'est sous windows avec Visual Studio 2005 Standard (anglais)
Merci encore "d'avance"
Marsh Posté le 20-08-2007 à 09:37:51
ReplyMarsh Posté le 20-08-2007 à 15:58:20
Elmoricq a écrit : Il faut réécrire le fichier intégralement, sans les blocs à supprimer. |
Salut
Pour le réécrire sans les octets à supprimer il faut d'abord le lire n'est-ce pas?
Cette méthode de lecture sera lente à mon avis, donc ce que je voulais c'est
de supprimer le nombre de bytes cités dans mon premier message directement
sans avoir besoin de lire le fichier, les datas à supprimer ne sont pas prédéfinis.
Le programme ou le code à exécuter n'aura pas des définitions liées aux
types de datas mais plutôt il fera le calcul sans donner d'importance aux datas:
Il doit supprimer 18 bytes au début puis caluler 1024 octets à laisser, ensuite supprimer
5 octets puis cacluler la même taille de bloc (1024 octecs) puis supprimer 5 autres
octets et ainsi de suite jusqu'au dernier bloc (1344 ième) ou il ne doit supprimer
que 4 octets qui restent à la fin du fichier.
En fait les 5 octets dont je parle sont des checksums 16 bits suivis chacun de la valeur 04
(04 désigne la taille en hex du bloc suivant => 400h= 1024 octets), voilà un exemple:
1 ier bloc de 1024 octets suivi de 0000 1B5C 04
2ème bloc de 1024 octets suivi de 0001 5A3D 04
3ème bloc de 1024 octets suivi de 0002 6FDC 04
et ainsi de suite ...
Le dernier == 1024 octets suivi de 053F E7FE
Si vous le constatez les checksums sont devancés d'une suite d'index
0000, 0001, 0002 .... 053F (1343) donc le total des blocs est 1344
à ajouter aussi que la taille originale est 1 382 993 octets
il doit être après la suppression ====> 1 376 256 octets.
Marsh Posté le 20-08-2007 à 16:03:12
Tu n'as pas le choix, tu ne peux pas supprimer des blocs dans un fichier sans le réécrire intégralement.
Et oui, il faut le lire avant.
Marsh Posté le 20-08-2007 à 16:12:27
Elmoricq a écrit : Tu n'as pas le choix, tu ne peux pas supprimer des blocs dans un fichier sans le réécrire intégralement. |
Re
Et comment ça sera cette lecture en négligeant les datas à supprimer?
En memoire ou en créant un fichier temporaire ou autre? Excusez-moi
mais je suis un nul qui débute en C++ même si j'ai déjà des bases en ce
qui concerne l'édition hexadécimale, je trouve que c'est difficile, mais bon,
avec la volonté et la patience ça viendra
Merci d'avance.
Marsh Posté le 21-08-2007 à 02:08:27
Taz a écrit : tu mmap et du décales. |
Désolé mais je suis toujours bloqué, comme j'ai dit dans mon message précédent
je suis débutant et je voudrais savoir tout dès le début:
Quelles directives devrais-je inclure ?
#include <??>
#include <??>
#include <??>
Et quelles fonctions devrais-je utiliser pour ouvrir le fichier de la manière que vous avez
expliquée brièvement ?!
Excusez-moi, je ne demande pas avoir tout le code mais ce que je veux c'est de
me pousser à trouver le bout du fil car je suis toujours coincé !!!
Merci d'avance
Marsh Posté le 21-08-2007 à 04:21:03
Taz a écrit : tu mmap et du décales. |
Ca existe mmap en win32?
J'ai toujours vu des MapViewOfFile mais jamais de mmap
Brahimovitch a écrit :
|
http://msdn2.microsoft.com/en-us/library/aa366761.aspx
M'enfin je vois pas l'intérêt du mmap, des read/fread feraient pareil. Pour faire du mmap, ca va compliquer la chose, s'il veut travailler sur l'intégralité du fichier il devra utiliser fstat avant... Si c'est un débutant, il va se vautrer dans les pointeurs à coup sur.
Marsh Posté le 21-08-2007 à 11:54:43
Gf4x3443 a écrit : |
Gf4x3443 a écrit : |
qu'est-ce que jen sais si ça existe ... mmap ça va tout simplifier. Si tu sais faire l'opéation dans un char[], alors tu sais la faire. Ca va être plus chiant et moi efficace.
Marsh Posté le 22-08-2007 à 14:34:10
Citation : http://msdn2.microsoft.com/en-us/library/aa366761.aspx |
Salut
Interessant merci beaucoup.
Citation : Quelles directives devrais-je inclure ? |
Un petit eclaircissement sur les includes à utiliser sera le bienvenu, merci à tous.
Marsh Posté le 22-08-2007 à 16:41:27
Brahimovitch a écrit : |
Manifestement, Le lien que je donne, ca doit être du poulet.
Header
Declared in Winbase.h; include Windows.h.
Faudrait peut être commencer par la tu crois pas?
Marsh Posté le 20-08-2007 à 03:44:35
Salut tout le monde
Queluq'un connaît quel code à utiliser pour supprimer des octets séparés par blocs
(de 1024 octes chacun) d'un fichier binaire? Pour plus de précision:
Le nombre d'octets à supprimer en premier lieu est au début du fichier (Header): 18 octets.
Puis 5 ocetcs à supprimer toujours après chaque bloc, sauf après le dernier (1344 ième) seulement 4 octets à supprimer.
Merci d'avance de vos réponses.
Message édité par Brahimovitch le 20-08-2007 à 03:45:40