2012-04-05 101 views
4

我正在實現一些管理簡單文件(如文本文件)的代碼,並且我想向文件中添加一些信息,例如位置,標籤等,而無需在文本文件上寫入額外的文本。我可以在iOS中設置任意屬性文件嗎?

我認爲最簡單的方法是爲文件屬性添加額外的信息,但我不確定這是否可能。

我一直在玩NSURL的setResourceValue:forKey:error:,但似乎只有NSURL的預定義鍵實際上寫了文件的屬性。所以:

NSURL *fileURL; //suppose this points to something 
NSError *error; 
id resourceValue; 

[fileURL setResourceValue:@"recorded string" forKey:@"testingkey" error:&error]; 
[fileURL getResourceValue:&resourceValue forKey:@"testingkey" error:&error]; 

在上面的代碼,這兩個函數setResourceValue:forKey:error:getResourceValue:forKey:error:回報YES這意味着他們是成功的,但resourceValue終值是零,這可能意味着該值實際上沒有記錄。

那麼,有沒有辦法將我自己的屬性設置爲iOS中的文件?如果不是的話,那麼將文件中的額外信息同化的一種很好的(簡單的)方法,不需要修改文件本身?

非常感謝!

+1

這就是你需要: http://www.cocoanetics.com/2012/03/reading-and-writing-extended-file-attributes/ – 2012-04-22 05:28:54

+0

謝謝!這確實是我所需要的。 – 2012-05-01 06:23:50

+0

@Marcelo設置後,我從此代碼獲取輸出。 – 2014-01-08 18:00:48

回答

0

這是此問題補充:extended-file-attributes

這文章在有關如何解決這不僅不需要改變原有的文件內容,而且還寫了一些信息到文件的問題詳細分析。

你可以使用這樣的:

#include <sys/xattr.h> 

    if (!&NSURLIsExcludedFromBackupKey) { 
     // iOS <= 5.0.1 
     const char *filePath = [[URL path] fileSystemRepresentation]; 
     const char *name = "com.apple.MobileBackup"; 
     u_int8_t value = 1; 
     int result = setxattr(filePath, name, &value, sizeof(value), 0, 0); 
    } else { 
     // iOS >= 5.1 
     NSError *error = nil; 
     [URL setResourceValue:@YES 
         forKey:NSURLIsExcludedFromBackupKey 
         error:&error]; 
    } 
相關問題