Sur Mac, depuis OS X, tous les fichiers n'ont pas nécessairement de type/createur. Plus exactemnt, leurs type/createur vaut 0 pour le système, c'est-à-dire 4 fois le Caractere(0) une fois traduit en "4 char code". Dans ton exemple, tu peux tester ça facilement :
1 2 3 4 5
| $extent:=type document(Document)
$creat:=createur dcument(Document)
ALERTE(Chaine(Longueur($extent)))
ALERTE(Chaine(Longueur($creat))) |
Et si tu boucles sur chaque caractere...
1 2 3
| boucle($i;1;longueur($extent))
ALERTE(Chaine(Code ascii(extent[[$i]])))
Fin de boucle |
... tu verras 4 fois 0
Dans ces cas là, la seule façon d'avoir le type est de regarder l'extension, situé la fin du fichier : tu parcours Document à partir de la fin, jusqu'à trouver un point. Tu en déduis l'extention, et tu essayyes de la gérer ("text", "txt", rtf", "doc", "xls", ...)
Petite note technique : pour être sûr que le type ou le créateur est à 0, sans risquer d'interference avec un type/createur exotique (certaines applications ont des types du style (en 4D) Caractere(1)+Caractere(2)+Caractere(3)+Caractere(4)), il faut mettre la valeur dans un blob, transférer le blob dans un numérique et tester :
1 2 3 4 5 6 7 8 9 10 11 12 13
| C_BLOB($blob)
TEXTE VERS BLOB($extent;$blob)
Si (BLOB vers entier long($blob;Ordre octets natif )=0)
ALERTE("Type vide : se baser sur l'extension")
$extension:=""
Boucle ($i;Longueur(Document);1;-1)
Si (Document[[$i]]=".")
$extension:=Sous chaine(Document;$i+1)
$i:=1
Fin de si
Fin de boucle
ALERTE("Extention : <"+$extension+">")
Fin de si |
Au passage, pas besoin de vraiment ouvrir le document pour récupérer ces infos, tu peux utiliser la constante LIre chemin acces :
$file_import:=Ouvrir document("";"";Lire chemin accès )
A+
Thibaud
Partager