2012-04-12 21 views
8

Trong một bản ghi chép, tôi nhận được một filepath mà tôi đã mở.Bản tóm tắt: Cách mở tệp bằng chương trình mặc định?

Filepath có định dạng "/Users/xxx/my/file/to/open.xyz".

Tôi muốn mở bằng chương trình mặc định. Nếu nó là một định dạng AVI, tôi cần phải mở nó với một chương trình video, nếu nó là một xls, với excel, ...

Tôi đã thử nhiều thứ mà không cần bất kỳ thành công:

--dstfile contains the previous path 
tell application "Finder" 
    activate 
    open document dstfile 
end tell 

-> I' m nhận được lỗi 1728, nói với tôi rằng ông đã không thể có được tài liệu

tell application "Finder" 
    activate 
    open document file dstfile 
end tell 

-> Tương tự ở đây

tell application "Finder" 
    activate 
    open document POSIX file dstfile 
end tell 

- > Cùng đây

Tôi chắc chắn rằng các tập tin tồn tại bởi vì tôi làm điều này trước khi thực thi mã này:

if not (exists dstfile) then 
    display dialog "File isn't existing" 
end if 

tôi không thể sử dụng open.xyz synthax của để của ... bởi vì tôi nhận được như một tham số.

Xin hãy giúp tôi tuyệt vọng: '(

trả lời: Dựa trên câu trả lời, tôi kết thúc với điều này:

set command to "open " & quoted form of dsturl 
do shell script command 
+0

Tôi khuyên bạn nên tránh giải pháp này. Nó là giòn, chậm hơn và hoàn toàn không cần thiết. Sử dụng câu trả lời của @ kopischke: http://stackoverflow.com/a/10132641/754997 –

Trả lời

14

Vấn đề của bạn ở đây được gấp đôi:

  1. đường dẫn của bạn có ký hiệu POSIX, mà AppleScript không thể ép buộc đối tượng bí danh hoặc đối tượng được chấp nhận cho Trình tìm kiếm, vì chúng sẽ chỉ được tạo ngầm từ chuỗi đường dẫn trong ký hiệu HFS (Users:xxx:my:file:to:open.xyz). Tuyên bố rõ ràng đường dẫn của bạn dưới dạng Tệp POSIX sẽ giải quyết vấn đề này. Tuy nhiên,
  2. cuộc gọi của bạn để Finder tiền tố tài liệu đến con đường, nhưng từ điển AppleScript Finder của không chứa một tài liệu loại đối tượng (có một tài liệu tập tin đối tượng, nhưng nó là một đứa trẻ của mục công cụ tìm không thể tạo trong cuộc gọi này). Việc xóa phần đó sẽ giải quyết vấn đề.

TL; DR: dòng sau sẽ mở một tập tin được thông qua một con đường POSIX trong chương trình mặc định mà không cần trông cậy vào vỏ:

tell application "Finder" to open POSIX file "/Users/xxx/my/file/to/open.xyz" 

Nên biết trước: đây là giải pháp đơn giản nhất , nhưng nó sẽ chỉ hoạt động đối với các đường dẫn POSIX đủ điều kiện (tức là bắt đầu với /), giống như câu hỏi trong câu hỏi. Xử lý những người thân tương đối (tức làđường dẫn bắt đầu bằng ~, . hoặc ..) OTOH cần có API AppleScript-ObjectiveC (không chính xác tầm thường) hoặc trình bao (vui chơi với trích dẫn của bạn).

+1

Một cách khác để đặt nó là bạn không yêu cầu ứng dụng mở tài liệu, bạn yêu cầu họ mở tệp. "Tài liệu" và "cửa sổ" chỉ tồn tại trong bộ nhớ, và được tạo ra như là kết quả của việc mở một tập tin. –

+0

@ kopischke, làm cách nào để bạn sử dụng 'tệp POSIX mở' liên quan đến' ~ '? –

+0

Bạn không, đường dẫn POSIX AppleScript chỉ hoạt động như các đường dẫn có đủ điều kiện, vì sự ép buộc đường dẫn HFS là khá ngây thơ (tức là nó chuyển đổi '~/my/path' thành': ~: my: path'). Nếu bạn cần các đường dẫn POSIX tương đối, bạn có thể nghiên cứu sâu vào API AppleScript-ObjectiveC, nằm ngoài phạm vi của một chú thích, hoặc trình bao, đã được mô tả trong các câu trả lời khác. Vì câu hỏi của OP đã chỉ định đường dẫn đủ điều kiện, câu trả lời của tôi là viết tắt, nhưng tôi sẽ thêm tuyên bố từ chối trách nhiệm. – kopischke

0

Hãy thử:

set dstfile to "~/xxx/my/file/to/open.xyz" 
do shell script "open " & dstfile & "" 
+0

Bỏ phiếu bầu chọn: Tôi khuyên bạn nên tránh giải pháp này. Nó là giòn, chậm hơn và hoàn toàn không cần thiết. Sử dụng câu trả lời của @ kopischke: http://stackoverflow.com/a/10132641/754997 –

Các vấn đề liên quan