Тестирование приложения на наличие файлов

Хорошо, я думал, что это будет простой, но, по-видимому, я пропускаю что-то очевидное. Мой код выглядит следующим образом:

set fileTarget to ((path to desktop folder) & "file$") as string

if file fileTarget exists then
    display dialog "it exists"
else
    display dialog "it does not exist"
end if

Легко ли? К сожалению, когда я запускаю скрипт, он возвращает ошибку

Can’t get file "OS X:Users:user:Desktop:files$".

. Не имеет значения, существует файл или нет, это та же самая ошибка, которую я получаю. Я пробовал дюжину разных вещей, но это все равно меня озадачивает.

9
задан joewiz 1 July 2012 в 17:04
поделиться

2 ответа

Я использую эту подпрограмму, чтобы узнать, существует ли файл или нет:

on FileExists(theFile) -- (String) as Boolean
    tell application "System Events"
        if exists file theFile then
            return true
        else
            return false
        end if
    end tell
end FileExists

Добавьте соль по вкусу.

19
ответ дан 4 December 2019 в 08:31
поделиться

Это просто, за исключением того, что «существует» - это команда Finder или System Events. Это не простая команда в формате applescript. Таким образом, вы должны заключить его в блок кода приложения tell. К вашему сведению: вот еще один способ, не требующий приложения. Это работает, потому что, когда вы приводите путь к «псевдониму», он должен существовать, иначе вы получите ошибку. Итак, вы могли сделать следующее.

set fileTarget to (path to desktop folder as text) & "file$"

try
    fileTarget as alias
    display dialog "it exists"
on error
    display dialog "it does not exist"
end try

ПРИМЕЧАНИЕ: у вас есть ошибка в вашем коде. Вы используете оператор & для добавления строк, но делаете это неправильно, хотя по счастливой случайности получаете правильный ответ. При использовании оператора & каждый объект по обе стороны от оператора должен быть строкой. «Путь к папке на рабочем столе» не является строкой, поэтому мы сначала должны сделать это строкой, а затем добавить к ней строку «file $». Так что сделайте это так ...

set fileTarget to (path to desktop folder as text) & "file$"
6
ответ дан 4 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: