2015-04-01 269 views
1

由於我的性格稍顯迷戀,我的大部分生產時間一直在流失,導致一個小問題。AppleScript:「文件已經打開」但「文件未打開」

我最近從Mac OS X Tiger切換到Yosemite(是的,這是一個相當大的飛躍)。我並不認爲AppleScript發生了很大的變化,但是我遇到了一個我不記得過去有過的問題。我有下面的代碼,但有一個有效的文件路徑:

set my_filepath to (* replace with string of POSIX filepath, because typing 
          colons was too much work *) 
    set my_file to open for access POSIX file my_filepath with write permission 

代碼的其餘的人,我很容易解決的錯誤,而是因爲錯誤的close access命令之前停止該腳本,當然AppleScript的左文件參考打開。所以當我試圖再次運行腳本時,我被告知語法錯誤:文件已經打開。這是可以預料的。

我遇到了一個問題,試圖關閉引用:不管我做了什麼,我收到一條錯誤消息,指出文件不是打開。我試過close access POSIX file (* filepath string again *),close access file (* whatever that AppleScript filepath format is called *)等等。最終我通過重新啓動計算機來解決問題,但這並不是一個完美的解決方案。如果沒有其他解決方案出現,那就這樣吧;然而,出於理智和實際的原因,我不滿意重新啓動關閉訪問。有沒有人有關於這個問題的見解?

我懷疑我忽略了一些顯而易見的事情。


編輯:等等,不,我的開關不是直接來自Tiger;我在Snow Leopard中有一箇中間階段,但我沒有做太多的腳本。我不知道這是否相關。

+0

重新啓動腳本編輯器的另一種方法是購買腳本調試器,我相信在給出警告後,您可以關閉「泄漏」的文件處理程序。我的版本4.5(過時)至少這樣做。 – McUsr 2015-04-02 09:01:27

回答

0

同意重新啓動可能是最簡單的解決方案。另一個想法是unix實用程序「lsof」來獲取所有打開文件的列表。它返回一個相當大的列表,所以你可以將它與「grep」結合起來爲你過濾它。因此,下一次從終端試試這個,看看你得到的結果...

lsof +fg | grep -i 'filename' 

如果你得到一個結果,你會得到一個進程ID(PID),你可能會殺/退出的過程是保持文件打開,從而關閉文件。我從來沒有嘗試過這種情況,但它可能工作。

你有沒有垃圾垃圾清空,因爲它說文件是打開的?那時候我使用這種方法,大多數情況下都是這樣。我實際上做了一個名爲What's Keeping Me的應用程序(found here)來幫助人們解決這個問題,並使用此代碼作爲應用程序的基礎。也許它也會在這種情況下工作。

祝你好運。

+0

這確實有用。謝謝。 – 2015-04-02 22:23:22

+0

如果這回答了您的問題,請通過檢查將其標記爲答案。這讓其他人知道你已經得到了幫助。 – regulus6633 2015-04-03 00:43:43

+0

我不能相信我花了多長時間尋找那個複選標記。 – 2016-02-07 01:54:46