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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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 74
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 74
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
Rejoignez-nous