Mettre a jour un fichier [delphi] - Programmation
Marsh Posté le 04-01-2002 à 19:01:33
ReplyMarsh Posté le 04-01-2002 à 19:11:45
Tu dois pouvoir tronquer ton fichier en modifiant la propriété .size de ton TFileStream.
Si ca ne marche pas, tu peux aussi passer par un stream temporaire (TMemoryStream ou autre) pour y copier le contenu de ton stream d'origine avec le nouveau tag plus court... pas sur d'avoir été tres clair là...
[edtdd]--Message édité par JWhy--[/edtdd]
Marsh Posté le 04-01-2002 à 19:19:51
JWhy a écrit a écrit : Tu dois pouvoir tronquer ton fichier en modifiant la propriété .size de ton TFileStream. Si ca ne marche pas, tu peux aussi passer par un stream temporaire (TMemoryStream ou autre) pour y copier le contenu de ton stream d'origine avec le nouveau tag plus court... pas sur d'avoir été tres clair là... |
Si si c'est clair, moi qui ne sias pas ce qu'est un stream j'ai compris ! (c'est quoi un stream ?)
Marsh Posté le 04-01-2002 à 19:21:20
Ou tu remplis avec des 0....
Marsh Posté le 04-01-2002 à 19:22:59
ou tu retires avec un éditeur héxa (très pratique pour la progra, enfin pour moi en tout cas !)
Marsh Posté le 04-01-2002 à 19:24:36
Il y as une fonction Trunk si je me souviens bien dans les TFileStream... Attend je look.
(Stream = flux).
Marsh Posté le 04-01-2002 à 19:25:24
DrLobo a écrit a écrit : J'utilise un TfileStream pour manipuler un fichier mp3 A la fin de ce fichier je met a jour un tag id3 de taille variable. Mon probleme est que si le nouveau tag est plus court que l'ancien il restera un bout de l'ancien tag. Comme je peut couper le bout qui depasse? |
G un ennorme doute là.... les tags ID3 ne sont pas au début du fichier ? à la fin d'un MP3 je crois que C juste le tag standard avec une taille fixe.... (C loin tout ça alors.....)
Marsh Posté le 04-01-2002 à 19:26:35
Non, je confond avec les TextFile... C bien la propriété Size à changer :
Indique la longueur, exprimée en octets, de la ressource identifiée par la propriété Handle.
property Size: Longint;
Description
Consultez la propriété Size pour déterminer le nombre d'octets dans la ressource. Affectez Size pour tronquer les informations de la ressource. Il n'est pas possible d'utiliser la propriété Size avec toutes les ressources de communication auxquelles il est possible d'accéder en utilisant un objet THandleStream.
Parfois faut lire l'aide
Marsh Posté le 04-01-2002 à 19:27:02
ou ça....
CopyFrom
Copie directement le nombre spécifié d'octets d'un flux vers un autre flux.
function CopyFrom(Source: TStream; Count: Longint): Longint;
Description
La méthode CopyFrom permet de copier dans ce flux des données d'un autre flux. L'utilisation de CopyFrom évite à l'utilisateur d'employer, pour effectuer la copie, un tampon qu'il faut créer, dans lequel il faut lire les données puis les écrire et qu'il faut enfin libérer.
CopyFrom copie Count octets du flux spécifié par Source dans ce flux. La méthode déplace ensuite la position en cours de Count octets et renvoie le nombre d'octets copiés.
Si Count a la valeur 0, CopyFrom fixe la position dans Source à 0 avant de lire les données, puis copie tout le contenu de Source dans ce flux. Si Count est supérieur ou égal à 0, CopyFrom lit à partir de la position en cours dans Source.
Marsh Posté le 04-01-2002 à 19:27:47
[SDF]Poire a écrit a écrit : G un ennorme doute là.... les tags ID3 ne sont pas au début du fichier ? à la fin d'un MP3 je crois que C juste le tag standard avec une taille fixe.... (C loin tout ça alors.....) |
Oui et non
Les IDTag v1 sont à la fin, les IDTagv2 sont au début...
Marsh Posté le 04-01-2002 à 19:31:29
Bruce a écrit a écrit : Oui et non Les IDTag v1 sont à la fin, les IDTagv2 sont au début... |
Mais ils sont pas de taille fixe à la fin ? (me suis occupé que de des IDTagV2 et les tags de fin de base... (C pas si ils ont un nom...))
Marsh Posté le 04-01-2002 à 19:33:12
Oui, ils sont de taille fixe à la fin, mais faut quand même remplir les valeur de blanc pour pas avoir de bug...
Marsh Posté le 04-01-2002 à 19:43:19
Bruce a écrit a écrit : Oui, ils sont de taille fixe à la fin, mais faut quand même remplir les valeur de blanc pour pas avoir de bug... |
Donc C ce que j'avais dit il faut pas tronquer mais foutre des 0
Marsh Posté le 04-01-2002 à 20:38:17
merci pour toutes ces reponses!
je vais de ce pas tester tous ca.
le tag a la fin du fichier est le tag id3v1 d'une taille fixe de 128 octets, mais ce que je veux mettre a jour c'est le tag lyrics3 qui lui est de taille variable et se trouve juste avant le tag id3v1
Marsh Posté le 04-01-2002 à 20:44:26
Ben je viens de tester et comme l'a dit JWhy, il suffit de modifier la propriété size du TFileStream pour couper les bouts qui dépassent
Marsh Posté le 04-01-2002 à 17:01:38
J'utilise un TfileStream pour manipuler un fichier mp3
A la fin de ce fichier je met a jour un tag id3 de taille variable.
Mon probleme est que si le nouveau tag est plus court que l'ancien il restera un bout de l'ancien tag.
Comme je peut couper le bout qui depasse?