IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Petit problème et grande incompréhension à propos des chemins et des files associées ! [AppleScript]


Sujet :

AppleScript

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut Petit problème et grande incompréhension à propos des chemins et des files associées !
    Bonsoir,
    N'étant pas très doué, je n'arrive pas à comprendre pourquoi le script suivant fonctionne et me désigne bien le fichier voulu dans une fenêtre du Finder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tell application "Finder"
    	set FileDuCheminSource to POSIX file "/Users/samysamy/Movies/Motion Templates.localized/Titles.localized/CHAUSSETTES/_ShortCuts_Tuto/SHORTCUTS V3/SHORTCUTS V3.moti"
    	reveal FileDuCheminSource
    	activate # focuses the window
    end tell
    ...tandis que celui-ci me retourne un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    set CheminEffet to "/Users/samysamy/Movies/Motion Templates.localized/Titles.localized/CHAUSSETTES/_ShortCuts_Tuto/SHORTCUTS V3/SHORTCUTS V3.moti"
    tell application "Finder"
    	set FileDuCheminSource to POSIX file CheminEffet
    	reveal FileDuCheminSource
    	activate # focuses the window
    end tell
    Le message d'erreur étant " Erreur dans Finder*: Il est impossible d’obtenir POSIX file "/Users/samysamy/Movies/Motion Templates.localized/Titles.localized/CHAUSSETTES/_ShortCuts_Tuto/SHORTCUTS V3/SHORTCUTS V3.moti"."

    Je crois que je n'ai toujours pas compris comment fonctionne les histoires de chemin...

    Question subsidiaire : auriez vous le lien d'un site où je puisse potasser les question de path, file, posix , alias , etc...

    En vous remerciant bien par avance pour votre aide
    Martin

  2. #2
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonjour,

    Effectivement, on mélange parfois des textes (représentant des chemins), des alias, des files et des objets POSIX file.
    Cela d'autant plus que le compilateur Applescript est parfois accommodant (trop !) lors de la compilation.

    Voici la documentation Apple:
    https://developer.apple.com/library/...ndFolders.html
    En particulier tu remarques que, dans cette page, aucun exemple n'utilise l'application Finder. Ces références sont directement accessibles sans le Finder (niveau OS pour simplifier).

    Quant aux POSIX, la page suivante est assez claire:
    https://www.satimage.fr/software/en/...ile_paths.html
    Dans celle-ci, toujours pas de référence à l'application Finder.

    En pratique, il faut éviter (autant que faire se peut !) d'utiliser le Finder qui présente des lenteurs. Pour 1 ou 2 fichiers, cela ne se remarque pas, mais pour quelques centaines...!!! et pour quelques milliers, il y a un fort risque de plantage.
    Comme l'indiquent les 2 liens ci-dessus, on peut fort bien manipuler des fichiers et des dossiers sans l'application Finder (le fameux tell Application "Finder").
    On peut même allez plus vite en utilisant les fonctions Unix de gestion des fichiers via un "do shell script": beaucoup, beaucoup plus rapide.
    Il faut ajouter que le Finder a aussi son propre objet "file" qui hérite des propriété des Finder items et qui a les propriétés type, creator type, stationnery, product version,...etc.

    Donc le mot file a plusieurs sens selon le contexte !!

    Ceci étant posé, on est parfois obligé d'utiliser malgré tout le Finder: c'est la cas de la fonction Reveal que tu utilises.
    La documentation de Reveal (applescript Editor / menu Fenêtre / Bibliothèque et dans la fenêtre faire double click sur Finder pour voir la documentation de toutes les fonctions) indique que le paramètre de Reveal doit être un objet Finder, (un Finder item).
    ...donc pas un file en général, mais un file du Finder


    Dans le premier cas, FileDuCheminSource est tout de suite compris par le compilateur comme une référence à un fichier (Finder Item) par l'assignation faite avec un POSIX file "chemin en texte"
    Dans le second cas, il me semble que le compilateur interprète d'abord les mots "file CheminEffet" ...qui lui donne un objet "file" au sens Finder, puis il reste POSIX tout seul qui n'est pas compris


    Oui, je sais, on se mélange les pinceaux. Quand j'ai un doute, je vérifie 2 choses:
    - la documentation de l'application dans la fenêtres bibliothèque de script editor qui me donne le type d'objet et ce dont il hérite
    - dans le script, j'ajoute éventuellement une ligne de log pour m'indiquer la class de la variable que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log "class=" & class of FileDuCheminSource
    ce qui dans le premier cas donne "(*class=«class furl»*)" qui est bien un Finder url (donc un objet Finder)

    et puis, comme indiqué plus haut, je n'utilise les blocs tell Finder que lorsque je n'ai pas trouvé comment faire sans, lorsque le script est simple et qu'il manipule peu de fichiers.

    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut
    Merci mon bon Philippe ! Tu est adorable de prendre le temps de me répondre aussi précisément.
    Il faut que je me penche sérieusement sur ces histoires de chemin et de file pour m'en faire une image claire.
    Et ta remarque à propos de l'utilisation du Finder est très intéressante. Il faut que je me penche là-dessus aussi !
    C'EST SUPER que tu sois là. J'ai l'impression je crois de me voir quand il s'agit de répondre aux utilisateur de Final Cut Pro...

    Pour l'instant je suis sur un dernier problème qui concerne la localisation des dossiers.
    Je te l'expose mais ne te sens pas obligé d'y répondre. Je suis au début de mes recherches et je vis peut être trouver sans ton aide.

    Alors :
    FAIT 01
    Imaginons d'abord un fichier H contenu dans un ensemble de dossier suivant ce chemin : A/B/C/D/E/F/G1/H
    Donc A est un DISQUE 01 puis B, C ,D, E, F et G1 son des dossiers et H un fichier.
    Donc ça donne le chemin : DISQUE 01/B/C/D/E/F/G1/H... voilà donc le chemin du fichier H.
    FAIT 02
    Par ailleurs il existe aussi un dossier G2 dans le dossier F. Donc le dossier F contient deux dossiers (G1 et G2)
    FAIT 03
    Tous les noms des dossiers sont "localisés" (B.localized). Leur nom dans le Finder dépend donc de la langue de l'utilisateur si j'ai bien compris.
    Par exemple le dossier "Fondu" est en fait un dossier du nom "Fade.localized" quand on lit son chemin. Et ".localized" indique probablement que l'info se trouve quelque part...

    CE QUE JE FAIS
    1.
    Pour les besoins de mon application, je crée un emboitement de dossiers du même nom que E, F dans un second disque 02.
    Donc ça crée un chemin DISQUE 02/E/F. Je les créer via le Finder avec l'instruction 'make new folder'... (quand j'aurais bien saisi comment ne pas recourir au Finder, je le ferais autrement. Grâce à toi ! Mais là n'est pas la question pour l'instant ).
    Pour bien faire la différence dans cette explication entre ces deux dossiers F qui ont le même nom dans les deux disques, j'appellerais celui du DISQUE 02 F'. Et pareil pour E.
    Donc on aura le chemin DISQUE 02/E'/F'
    2.
    Ensuite je copie le dossier G1 dans le dossier F' (via la commande 'duplicate G1 to F') . J'obtiens donc une copie de mon fichier H dans mon DISQUE 02.
    Il a donc ce chemin DISQUE 02/E'/F'/G1/H.
    J'espère que je suis clair jusqu'ici ?
    A noter que si je ne copie pas directement le dossier E' dans le DISQUE 02 - ce qui irait plus vite- c'est que je ne veux pas copier le dossier G2 présent dans le dossier F... Donc en gros, je recrée le début de l'arborescence sur le DISQUE 02 (E'/F') puis j'y copie le reste de l'arborescence (G1/H).

    MON PROBLEME
    Pour le dossier G1, pas de problème ! Il garde sa localisation (surement parce qu'il a été copié via 'duplicate' et que cela conserve la localisation des dossiers et fichiers ???)
    Par contre, les dossiers E' et F' semble la perdre.
    Par exemple si le dossier E de départ se lisait "Fondu" dans le Finder, le dossier E' se lit "fade" dans le Finder....
    Donc en gros, c'est comme si je perdais la localisation.
    Je fais l'hypothèse que la localisation d'un dossier est un petit fichier contenu dans ce dossier et qu'il est copié avec 'duplicate' mais qu'évidement je me perds si je me contente de recréer un dossier du même nom dans le DISQUE 02...
    Le truc c'est quand je demande à mon Finder d'afficher les fichiers cachés, je ne vois pas de petit fichier qui pourrait servir à localiser le nom du dossier. Ces fameux petits fichiers qui commencent par un point pour se planquer en temps normal. Mais bon peut-être que la localisation du nom d'un dossier fonctionne tout autrement ???

    UNE SOLUTION ?
    Voili voilà pour l'interrogation du jour ...

    Merci encore Philippe d'avoir pris le temps de me répondre si longuement. Je vais potasser !!!
    Bonne fin de journée à toi

    Martin

  4. #4
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonsoir Martin,
    Le Finder utilise les propriétés d'un item qui contiennent (entre autre !) la "Name" et le "Display name".
    Ces 2 valeurs peuvent être différentes, mais si tu ne le spécifies pas à la création d'un item, par défaut, les 2 valeurs sont identiques.

    Rien de tel qu'un exemple pour s'en rendre compte avec le petit script ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set DF to path to desktop folder
    tell application "Finder"
        log "name=" & name of DF
        log "displayed name=" & displayed name of DF
    end tell
    Dans l'éditeur de script, tu copies et colles ce script, tu demande à voir les réponses / les log (en bas de la fenêtre) et tu lances le script.
    Il va afficher, pour ton dossier Bureau, son nom véritable "Desktop" pour toutes les langues et son nom affiché, qui, lui, dépend de la langue de ton système (=Bureau pour un système francophone).
    Cette même technique est utilisée pour tous les dossiers par défaut (image, vidéo, bureau, utilisateur, bibliothèque, préférences, ...).

    Comme je te sens venir, je vais anticiper ta question: comment créer un dossier avec un displayed name différent ?
    En théorie, le script ci-dessous devrait fonctionner car il assigne bien les 2 attributs. Mais malheureusement, Apple a mal implémenté cela et cela ne fonctionne pas !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tell application "Finder"
        make new folder at DF with properties {name:"Supertoto", displayed name:"totoaffiché"}
    end tell
    je ne connais pas d'autres solutions, mais comme tu vas regarder pour éviter l'utilisation du Finder, je pense que tu finira par copier les dossiers au lieu de les créer (-;

    Cordialement

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut
    Merci mille fois Philippe pour tout ça !!

    Avant que je me mette à reprendre tout mon script en supprimant le recours au Finder (j(ai hate" d'ne être là !), je le termine en essayant de régler les quelques problèmes restant. Parmi eux ce problème de name/displayed name
    Du coup je viens de tester le script que tu m'as gentiment proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    set DF to path to desktop folder
    tell application "Finder"
    make new folder at DF with properties {name:"Supertoto", displayed name:"totoaffiché"}
    end tell
    Mais une fois terminé, le dossier DF porte en fait le nom "Supertoto" (son 'name' et pas "totoaffiché". (son 'displayed name')
    Du coup je me dis qu'il y a peut-être quelque chose que je n'ai pas compris !??
    Ou alors il y a peut-être un petit truc à ajouter au script ???

    Bon je continue mes recherche à ce propos ...
    Et après je déFinderise le script !!!
    Merci Philippe
    Martin

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut
    Pardon pardon Philippe,
    Je viens de relire ta dernière réponse et je vois que tu as répondu !!
    "Mais malheureusement, Apple a mal implémenté cela et cela ne fonctionne pas !!" ...
    Merci encore pour ta patience.
    Je me plonge dans la definderisation !!
    Bonne soirée
    Martin

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut
    Et merci pour le tuyau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log "class=" & class of FileDuCheminSource
    ça m'aide beaucoup à comprendre... et ne pas mélanger les vaches et les cochons !
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème modification de cellules sur des feuilles non actives
    Par quentin06 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/11/2015, 12h31
  2. [10g] Petit problème avec grand pourcentage (to_char)
    Par CUCARACHA dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/06/2010, 18h16
  3. Problème avec une TImageList contenant des grandes images
    Par Manopower dans le forum Composants VCL
    Réponses: 8
    Dernier message: 17/11/2005, 15h20
  4. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  5. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo