Page 1 sur 1

Découper un fichier avec TruncateFile

Publié : sam. 16/août/2008 19:45
par Ar-S
Salut,
me revoilà avec un probleme d'incompréhension de l'utilisation de TruncateFile.

je voudrais faire un petit découpeur/réassembleur de fichier (oui je sais il en existe déjà des bien et blabliblabla...)

Je suppose donc que je dois utiliser la fonction TruncateFile mais voilà, la doc de PB ne donne pas d'exemple probant.

J'ai tenté de me lancer avec ce petit bout de code mais ça ne donne rien.

Code : Tout sélectionner

Taille.q = FileSize("bobo") ; bobo est un fichier quelconque.
Debug Taille 
If OpenFile(0, "bobo") 
  FileSeek(0,Taille/2) ; Logiquement le pointeur se place à la moité de bobo
  TruncateFile(0) ; La il est censé couper le fichier au pointeur
  MessageRequester ("","ok")
CloseFile(0)
Else
  MessageRequester ("","ça chie")
EndIf
End
Je n'ai pas trouvé d'exemple sur le fofo anglais ni ici bas. :?

Publié : sam. 16/août/2008 20:57
par Backup
d'un autre coté pour TruncateFile, il est dit :

Coupe le fichier à la position actuelle et supprime toutes les données qui suivent

alors dans le meilleur des cas tu n'as plus que ta première partie de potable !! :lol:

m'est avis qu'il faut le faire de toute pièce !! :D

avec l'utilisation de FileSeek(#Fichier, Position.q) ça doit etre relativement facile a faire ...

le principe tu regarde la taille du fichier, que tu divise en 2
tu lis un a un les octets du fichier (Nombre.b = ReadByte(#Fichier))

jusqu'a arrivé a la moitié du fichier
que tu sauve comme "nom_du_fichier.1_2"

et tu continue avec le reste
et a la fin sauvegarde de la suite "nom_du_fichier.2_2" ...

:)

les chiffres en lieu et place d'extension vont te permettre de savoir dans quel sens reconstruire le fichier plus tard...


ça demande réflexion, mais ça ne me semble pas bien dur a faire ....

pfffffffff ! je me traine une bulle en ce moment :lol:

Publié : dim. 17/août/2008 2:59
par Ollivier
Salut Ar-S,

Plusieurs questions me viennent à l'esprit :

>> Le nombre de morceaux est-il constant (2) ou non ?
>> La taille de chaque morceau est-elle égale aux autres ?
>> Les fichiers traités peuvent-ils dépasser la taille mémoire RAM totale, ou bien s'agit-il de petits fichiers ?

Woilà, selon les réponses, il y aura <> méthodes applicables.

Ollivier

Publié : dim. 17/août/2008 8:31
par Ar-S
Ollivier a écrit :Salut Ar-S,

Plusieurs questions me viennent à l'esprit :

>> Le nombre de morceaux est-il constant (2) ou non ?
>> La taille de chaque morceau est-elle égale aux autres ?
>> Les fichiers traités peuvent-ils dépasser la taille mémoire RAM totale, ou bien s'agit-il de petits fichiers ?

Woilà, selon les réponses, il y aura <> méthodes applicables.

Ollivier
Salut Olivier, merci de d'intéresser à ce projet.

- Le nombre de morceaux ne sera pas constant. On pourra déterminer la taille des parties. Sur un fichier de 20 Mo, on doit pouvoir dire, "je souhaite des parties de 7 Mo. Donc le prog devra faire 2 parties de 7 Mo et la dernière partie de 6 Mo.

- Mais.... ce serait sympa (et ça changerai de ce qui existe déjà) de pouvoir donner un poid max et un poid min. Par exemple pour mon Fichier de 20 Mo, sélectionner un découpage en partie de 3 à 8 Mo par exemple.

- Quand au dépassement de la taille de la RAM, j'avoue que je ne sais pas trop. Ayant 2 Go de RAM ça me parait bien gros (excepter les ISO je vois pas trop quoi découper au delà de 2 go). Mais si c'est possible, ça serait encore mieux.

- J'ajouterai enfin une derniere option si possible. La possibilité d'ajouter une sorte de marqueur avec mot de passe qui s'ajouterait au début ou à la fin des parties afin de pouvoir recoller/découper en pouvant protéger ces données. Cette dernière option est surement faisable mais ça reste une option.

En fait j'ai réussi à faire un découpeur de fichier mais ce dernier est en fait un GUI qui utilise rar.exe du pack winrar et donc, il n'est pas distribuable. D'ou mon envie de créer un logiciel 100% PB.

Publié : dim. 17/août/2008 9:08
par Backup
la methode que je préconise , peut tres bien utiliser une taille quelconque

mais par contre, on donne la taille d'un bloc , et cette taille devrai etre la meme pour tout les blocs (plus simple a gerer)....

sinon , il suffit d'ajouter en debut de bloc, la taille qu'il fait ... (moins simple a gerer)

genre on donne une taille de bloc de 512 ko

si le fichier fait 1 mo on aura un fichier de [512] et un autre de [512]

mais si le fichier fait 800 ko on aura un block de [512] et un autre de ce qui reste [288 Ko]...

bref ! c'est comme ça que marche la plupart des "découpeur de fichier" , il me semble :)

Publié : dim. 17/août/2008 13:26
par Ar-S
Ouaip ta méthode doit être gérable, je vais déjà tenter de l'imployer pour diviser un fichier en 2 ou 3 (chaque chose en son temps), mais pour les recoller ? ça doit se faire avec writebyte je suppose ?

ça me fait penser à un super prog de decoupage de fichiers qui se nomme Kamaleon 2 (pas cameleon). C'est un vieux soft espagnol qui permet non seulement de découper des fichiers en part de taille différentes, mais en plus de "cacher" chaque part dans une image (gif ou jpeg) le tout protégé par mot de passe et en donnant des noms aléatoires aux part.

Publié : dim. 17/août/2008 16:19
par Ollivier
Sans code (désolé plu bcp de temps malgré les sujets intéressants)

Pour le recollage, tu ouvres
1) ton fichier cible
2) Boucle I
a) Ouverture fichier source n°I
b) Copie vers cible

Pour démarrer, crée un fichier texte ASCII d'une ligne avec les
26 lettres de l'aphabet par exemple dedans. Tu t'en serviras comme cobaye.
Prépare ton interface de découpage. Sers-toi d'une liste ou d'un tableau pour répertorier les caractéristiques de chaque bloc (n°, taille, clé de
cryptage, etc...). N'hésite pas à duppliquer ce support (liste ou tableau) pour l'option «Undo». Attaque-toi à manipuler une chaîne avant de manipuler un fichier. Tu n'as juste qu'à moduler les actions sur cette chaîne, c-à-d créer UNE procédure pour UNE action sur cette chaîne.
Quand ton interface fonctionnera correctement. Remplace toutes les procédures créées pour les chaînes par des procédures créées pour les fichiers.

N'oublie pas de cloner ton fichier de départ par principe de précaution!

Et tout cela, bien entendu, en considérant la méthode préconisée par Dobro (passer d'un fichier à plusieurs fichiers et vice-versa comme ça pas de risque de saturation mémoire) :wink:

Et commence tes manip, octet par octet. Tu verras après pour optimiser le code.

Publié : dim. 17/août/2008 20:38
par Ar-S
Merci des conseils Ollivier,
je vais tenter de tripatouiller ça, faut dejà que je pense intelligemment l'interface. Aujourd'hui j'ai pas eu bcp de temps, demain serai plus calme à partir de 15h30.. J'essayerai de commencer à ce moment.