1 votes

Pourquoi mon applescript pour vérifier si un fichier existe échoue-t-il ?

J'ai une application Applescript qui saisit un nom d'utilisateur et lance un téléchargement basé sur ce nom d'utilisateur. Dans l'application, j'utilise le code ci-dessous pour vérifier si un fichier existe déjà et renommer le fichier si c'est le cas.

tell application "Finder"
if exists "~/Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then
    set x to 1
    repeat
        set newCbFilename to cbUsername & "_" & x as string
        if exists "~/Downloads/Conversion/" & newCbFilename & ".flv" as POSIX file then
            set x to x + 1
        else
            exit repeat
        end if
    end repeat
    copy newCbFilename to finalCbFilename
    display dialog "Filename already exists " & "File will be named: " & finalCbFilename & ".flv" buttons "OK" default button "OK" with title "Error" with icon caution
else
    copy cbUsername to finalCbFilename
end if
end tell

Hier, tout à coup, il a cessé de fonctionner correctement. J'avais ajouté le code suivant pour m'assurer que le dossier dans lequel je sauvegardais existait.

tell application "System Events"
if not (exists folder "~/Downloads/Conversion") then
    do shell script "mkdir ~/Downloads/Conversion"
end if

Même si je commente ce code maintenant, ça ne fonctionne toujours pas. Qu'est-ce que j'ai fait de mal ? fin de l'histoire

4voto

joelseph Points 10262

Il semble que le Finder ait besoin du chemin absolu vers le dossier personnel au lieu du chemin relatif. Au lieu de commencer le chemin par ~/ il doit commencer par /Users/username/ .

Au lieu de coder en dur le nom d'utilisateur dans le script, vous pouvez demander à AppleScript de construire le chemin absolu à la volée :

set homePath to POSIX path of (path to home folder)

Vous pouvez alors remplacer "~/ avec homePath & "

Par exemple :

if exists "~/Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then

deviendrait

if exists homePath & "Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then

Sinon, si vous utilisez uniquement ~ avec le chemin ~/Downloads/Conversion/ vous pourriez plutôt transformer l'ensemble du chemin en une variable :

set cbPath to POSIX path of (path to home folder) & "Downloads/Conversion/"

Alors le script final serait :

set cbPath to POSIX path of (path to home folder) & "Downloads/Conversion/"

tell application "Finder"
    if exists cbPath & cbUsername & ".flv" as POSIX file then
        set x to 1
        repeat
            set newCbFilename to cbUsername & "_" & x as string
            if exists cbPath & newCbFilename & ".flv" as POSIX file then
                set x to x + 1
            else
                exit repeat
            end if
        end repeat
        copy newCbFilename to finalCbFilename
        display dialog "Filename already exists " & "File will be named: " & finalCbFilename & ".flv" buttons "OK" default button "OK" with title "Error" with icon caution
    else
        copy cbUsername to finalCbFilename
    end if
end tell

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X