Lire un fichier SLDPRT en format texte

Philippe_judo
Messages postés
19
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
6 mai 2015
- 20 déc. 2011 à 22:40
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
- 21 déc. 2011 à 07:51
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

NHenry
Messages postés
14966
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
9 août 2022
161
20 déc. 2011 à 22:57
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
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
21 déc. 2011 à 07:24
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
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
21 déc. 2011 à 07:51
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
0