2010-10-22 98 views
2

我在iPhone上打開了一個文件,我通過網絡發送數據(使用「_open」打開)。不過,我有能力從iPhone的界面中刪除文件。這是使用NSFileManager的removeItemAtPath完成的。removeItemAtPath文件已經打開

奇怪的是,即使該文件當前處於打開狀態,removeItemAtPath仍然成功。

在傳輸完成之前,文件完全通過網絡傳輸,removeItemAtPath成功。那麼removeItemAtPath做一個懶惰的刪除?即,如果文件正在使用中,它會在以後排隊嗎?如果是的話就沒問題。

如果不是......有人知道我如何讓NSFileManager實際報告它沒有做刪除的事實嗎?

謝謝!

回答

3

據當時

http://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/fileManager:shouldRemoveItemAtPath文檔:

shouldRemoveItemAtPath;是如果操作應該進行,不一定是它已經成功刪除的項目。同樣有趣的是,文檔指出:

討論從此方法返回NO會導致NSFileManager停止刪除該項目。如果該項目是目錄,則該項目的任何子項都不會被刪除。

閱讀,導致我相信這是一個異步操作,並且此方法的返回值不應用於確定文件是否被成功刪除。我的猜測是,它將要刪除的對象排隊,並在文件不再使用時被刪除。

+0

這很適合猜測。我需要知道。我沒有實現shouldRemoveItemAtPath btw。同樣,沒有什麼能夠阻止它完全同步。我不明白這意味着什麼水平的異步性...... – Goz 2010-10-22 22:11:42

+0

我認爲這比猜測稍微多一點。這是官方的Apple文檔。如果成功刪除的返回值爲YES或不成功的刪除爲NO,那麼它會說明這一點。但是,它告訴我們的是,該方法的最佳猜測是刪除將繼續。 – bradenb 2010-10-24 22:47:22

+1

那麼我確實檢查過。該文件被刪除只是不立即。我的傳輸完成後,如果我嘗試再次傳輸文件,它會返回iPhone上的「不存在」。 已排序。 – Goz 2010-11-05 15:32:08