Lire un fichier SLDPRT en format texte

Signaler
Messages postés
19
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
6 mai 2015
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

Voici un fichier http://dl.dropbox.com/u/32606684/Pi%C3%A8ce2012.SLDPRT qui, une fois ouvert en format texte, donne la version dans laquelle il a été créé (rechercher "v e r s i o n" (attention aux espaces) et vous devriez trouver "5 0 0 0". Comment puis-je trouver ce nombre avec vb.net? J'ai essayé plusieurs chose et la commande qui me donne ce qui se rapproche le plus de ce que je cherche est "System.IO.File.ReadAllText("P:\Dropbox\Trouver version fichier Solidworks\Pièce2012.SLDPRT", System.Text.Encoding.UTF7)". Cepandant, je ne réussis pas à me rendre au bout du fichier : je lis quelques caractères (peut-être une ligne?) et il ne trouve plus rien. Ce qui est étrange par contre c'est que si je le sauve en txt (avec la commande "saveas" standard, parce qu'avec la commande "write", la sauvegarde se fait mais il ne me donne pas les bons caractères), je suis capable d'effectuer ma recherche avec Console.ReadLine.
Je passe peut-être du coq à l'âne mais j'ai essayé bien des choses et ça n'a pas fonctionné.

Merci de votre aide.

Philippe

3 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

"v e r s i o n", ce ne sont pas des espaces, mais des caractères null (ASCII=0)
L'encodage est UTF16.

(Je n'ai pas téléchargé le fichier, mais je pense que c'est cela)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pourquoi chercher a le lire en format Texte ?
c'est un fichier binaire, avec une structure clairement définie...

Windows Compound Binary File Format Specification

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Lisant rapidement les specs, tu voit que le fichier fonctionne par secteurs de 512 octets.

l'entête fait 512
s'ensuit de table de chainage,
le Root entry (le vrai) décrit comme le 'vrai' secteur 0

la version, que tu cherches a récupérer se trouvent dans le secteur suivant (dans l'ordre du fichier, je ne tiens pas compte de la table de chainage des secteurs)...

passés 80 octets, on tombe sur le CLSID(16 octets) du secteur.
Dans ton cas, c'est :
30 3D A3 83 C5 27 CE 11 BF D4 00 40 05 13 BB 57

Viennent ensuite dates, heures et differents flags.

au 129eme octet de ton secteur, tu as le nom de la propriété, sur 64 octets (Unicode), suivie de la taille reelle du nom, sur 2 octets


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp