5

何らかの理由で、ファイルが存在するかどうかを確認すると、常に true が返されます。

display dialog (exists (homePath & "Desktop/11-14.csv" as POSIX file as string))

デスクトップにその名前の csv があるかどうかに関係なく、それは true として返されます。ファイルの存在を介して機能する if 関数を作成したいのですが、常に true を返すため、if 関数が台無しになっています。これを修正するにはどうすればよいですか?

4

2 に答える 2

4

いくつかの説明: 常に true を返す理由は、ドライブ上のファイルではなくファイル クラスが存在するためです。「Hello World!」というのと同じです。文字列 "Hello World!" のため、常に true を返します。は確かに存在します。デフォルトでは、exists コマンドは、指定された値が欠損値であるかどうかのみをチェックします。値が欠落している場合は false を返し、それ以外の場合は true を返します。ただし、System Events や Finder など、標準の exists コマンドを上書きするアプリケーションがあります。したがって、ファイルに対して exists コマンドを使用し、ファイルが存在するかどうかを確認するには、adayzdone サンプル コードのように、コードを Tell アプリケーションの「System Events」または「Finder」ブロックでラップする必要があります。

この猫の皮を剥ぐ方法は他にもあります。

set theFile to "/Users/wrong user name/Desktop"

--using system events 
tell application "System Events" to set fileExists to exists disk item (my POSIX file theFile as string)

--using finder
tell application "Finder" to set fileExists to exists my POSIX file theFile

--using alias coercion with try catch
try
    POSIX file theFile as alias
    set fileExists to true
on error
    set fileExists to false
end try

--using a do shell script
set fileExists to (do shell script "[ -e " & quoted form of theFile & " ] && echo true || echo false") as boolean

--do the actual existence check yourself
--it's a bit cumbersome but gives you an idea how an file check actually works
set AppleScript's text item delimiters to "/"
set pathComponents to text items 2 thru -1 of theFile
set AppleScript's text item delimiters to ""
set currentPath to "/"
set fileExists to true
repeat with component in pathComponents
    if component is not in every paragraph of (do shell script "ls " & quoted form of currentPath) then
        set fileExists to false
        exit repeat
    end if
    set currentPath to currentPath & component & "/"
end repeat
return fileExists
于 2012-11-15T10:37:34.897 に答える
0

試す:

set xxx to (path to desktop as text) & "11-14.csv"
tell application "System Events" to exists file xxx
于 2012-11-14T21:30:00.383 に答える