2012-08-30 40 views
26

Giả sử tôi có một bộ tệp tùy ý được bao gồm trong Gói ứng dụng chính. Tôi muốn tìm nạp các tập tin URL cho những người lúc khởi động và lưu trữ chúng ở đâu đó. Điều này có thể sử dụng NSFileManager không? Tài liệu không rõ ràng về vấn đề đó.Nhận tham chiếu/đường dẫn tệp theo gói khi khởi chạy ứng dụng

Lưu ý: Tôi chỉ cần URL của tệp, tôi không cần truy cập các tệp thực.

+0

"Tham chiếu tệp" là gì? Con đường? URL? Gì? –

+0

Bằng cách tham khảo tập tin tôi có nghĩa là URL tập tin –

Trả lời

59

Bạn có thể lấy URL của tập tin trong gói chính sử dụng

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 

Bạn có thể viết URL này, ví dụ, một tập tin danh sách tài sản trong các tài liệu thư mục:

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"]; 
[dict writeToFile:plistPath atomically:YES]; 

Nếu bạn không biết tên của các tập tin và bạn chỉ muốn liệt kê tất cả các tập tin trong gói, sử dụng

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL]; 
for (NSString *fileName in files) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    // do something with `url` 
} 
+0

Điều gì xảy ra nếu tôi không biết tên của các tệp, tôi chỉ muốn nhận tất cả các tệp ở đó? –

+0

@AndrewLauerBarinov sau đó bạn có thể đọc tài liệu của NSFileManager. (Nhưng hãy xem bản chỉnh sửa, dù sao ...) –

+0

Cảm ơn bạn đã thêm thông tin! –

2

Vâng, bạn sẽ nhận được con đường của mình:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"]; 
NSURL *fileURL = [NSURL fileURLWithPath:path] 

// save it as any other object or in a dictionary: 

[myMutableDictionary setObject:fileURL forKey:@"file1.png"]; 

EDIT: để có được danh sách đầy đủ các tập tin, sử dụng NSFileManager, có đường dẫn đến bó bản thân, sau đó đi bộ mỗi thư mục nhận được các tập tin, làm cho URL và lưu chúng ở đâu đó. Có rất nhiều mã trên SO làm thế nào để đi bộ một thư mục để làm điều này. [Bạn nên cập nhật câu hỏi của bạn được cụ thể hơn về những gì bạn muốn, điều này đã không được thực hiện rõ ràng ở tất cả các ban đầu]

+1

Nếu tôi không biết tên của các tập tin, tôi chỉ muốn nhận được tất cả các tập tin đó? –

0

Có một API trên NSBundle (documentation) có sẵn trên 10,6 hoặc iOS 4 để có được một NSURL trực tiếp, chứ không phải đi qua một đường dẫn đến NSURL constructor:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext; 

Nó cũng có các biến thể mà phải mất một subdirectorylocalizationName, giống như -pathForResource: tương đương của nó.