簡體   English   中英

如何知道文件是通過NSFileManager編寫的

[英]How to know a file is writing via NSFileManager

我有一個問題,如何知道該文件是否可訪問???

例如,文件正在寫入,但尚未完成。 我再次檢查文件,

我用

[[NSFileManager defaultManager] fileExistsAtPath:filePath]; 

它返回true ...但文件無法訪問。

如何確定文件准備好了?

謝謝

韋伯

編輯也許我沒有清楚地告訴我的問題。 我的意思是如果你開始傳輸視頻文件。 在運輸完成之前。 視頻文件無法訪問,但您仍然可以獲取傳輸文件的一部分。

使用GCD概念以異步方式寫入數據,一旦完成,將執行完成處理程序。(應檢測寫入過程的完成)

調度I / O便利API允許您對文件描述符執行異步讀寫操作。 此API支持基於流的語義,用於訪問文件描述符的內容。

方法:

void dispatch_write ( dispatch_fd_t fd, dispatch_data_t data, dispatch_queue_t queue, void (^handler)(dispatch_data_t data, int error) );

參考: https//developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html#//apple_ref/c/func/dispatch_write

基本上你需要檢查文件的屬性,特別是NSFileBusy屬性:

if ([fileManager fileExistsAtPath:filePath]) {
    NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
    NSLog(@"File Busy %@", [attributes objectForKey:NSFileBusy]);
}

NSFileCoordinatorNSFilePresenter就是為此而創建的。 您可以從wwdc中找到有趣的高級iCloud文檔存儲視頻,其中包含此類的用法。 構建基於文檔的應用程序也很棒。

嘗試使用以下代碼獲取文件數據:

NSURL *url = [NSURL fileURLWithPath:filePath];
NSData *readData = [NSData dataWithContentsOfURL:url];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM