2009-09-30 44 views
9

Tôi mới làm quen với lập trình iPhone. Tôi muốn đọc nội dung của một tệp văn bản nằm trong thư mục con của thư mục Tài nguyên.iPhone: Nhận đường dẫn tệp nằm trong thư mục con của thư mục Tài nguyên

Cấu trúc thư mục Resource như sau:

Resource

  1. FOLDER1 ----> data.txt
  2. folder2 ----> data.txt
  3. Folder3-- -> Folder1 ----> Data.txt

Có nhiều tệp có tên "Data.txt", vậy làm cách nào tôi có thể truy cập tệp trong mỗi thư mục? Tôi biết cách đọc tập tin văn bản, nhưng nếu cấu trúc tài nguyên tương tự như cấu trúc trên thì làm thế nào tôi có thể nhận được đường dẫn?

Ví dụ: nếu tôi muốn truy cập tệp "Data.txt" từ Folder3, làm cách nào tôi có thể nhận đường dẫn tệp?

Vui lòng đề xuất.

Trả lời

12

Tiếp tục psychotiks trả lời một ví dụ đầy đủ sẽ trông như thế này:

NSBundle *thisBundle = [NSBundle bundleForClass:[self class]]; 
NSString *filePath = nil; 

if (filePath = [thisBundle pathForResource:@"Data" ofType:@"txt" inDirectory:@"Folder1"]) { 

    theContents = [[NSString alloc] initWithContentsOfFile:filePath]; 

    // when completed, it is the developer's responsibility to release theContents 

} 

Chú ý rằng bạn có thể sử dụng -pathForResource: ofType: inDirectory để truy cập nguồn tài trong các thư mục phụ.

+0

Nhưng có nhiều thư mục có cùng tên trong thư mục khác nhau. vì vậy trong trường hợp này làm thế nào có thể đạt được đường dẫn – Rupesh

+4

@Rupesh: Đối với thư mục thứ hai bạn sẽ cần phải sử dụng: '[thisBundle pathForResource: @" Dữ liệu "ofType: @" txt "inDirectory: @" Folder3/Folder1 "]'. Lưu ý rằng đối số 'inDirectory:' liên quan đến gốc gói. – PeyloW

+1

Bạn thực sự nên sử dụng '[NSString stringWithContentsOfFile: mã hóa filePath: lỗi NSUTF8StringEncoding: NULL]', cách này bộ nhớ là _ "managed" _, và quan trọng hơn là 'initWithContentsOfFile:' không được dùng nữa kể từ Mac OS X 10.4, và ** không có sẵn trên iPhone OS **. Vì vậy, mã sẽ chỉ hoạt động trong trình mô phỏng. – PeyloW

4
NSBundle* bundle = [NSBundle mainBundle]; 
    NSString* path = [bundle bundlePath]; 

Điều này cung cấp cho bạn đường dẫn đến gói của bạn. Từ đó, bạn có thể điều hướng cấu trúc thư mục của mình.

16

"Thư mục tài nguyên" thực sự là nội dung của gói chính của bạn, còn được gọi là gói ứng dụng. Bạn sử dụng pathForResource:ofType: hoặc pathForResource:ofType:inDirectory: để nhận đường dẫn đầy đủ cho tài nguyên.

Tải nội dung của tệp dưới dạng chuỗi được thực hiện bằng phương pháp stringWithContentsOfFile:encoding:error: cho chuỗi tự động được bán với initWithContentsOfFile:encoding:error: nếu bạn muốn chuỗi được giữ lại.

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" 
                ofType:@"txt" 
               inDirectory:@"Folder1"]; 
if (filePath != nil) { 
    theContents = [NSString stringWithContentsOfFile:filePath 
              encoding:NSUTF8StringEncoding 
              error:NULL]; 
    // Do stuff to theContents 
} 

Đây là hầu hết các câu trả lời tương tự như được đưa ra bởi Shirkrin trước đây, nhưng với sự khác biệt nhỏ rằng nó hoạt động trên mục tiêu. Điều này là do initWithContentsOfFile: không được chấp nhận trên Mac OS X và không khả dụng ở tất cả các hệ điều hành iPhone.

7

Shirkrin's answerPeyloW's answer ở trên đều hữu ích và tôi đã quản lý sử dụng pathForResource:ofType:inDirectory: để truy cập các tệp có cùng tên trong các thư mục khác nhau trong gói ứng dụng của tôi.

Tôi cũng tìm thấy giải pháp thay thế here phù hợp với yêu cầu của tôi tốt hơn một chút, vì vậy tôi nghĩ tôi muốn chia sẻ nó. Đặc biệt, xem this link.

Ví dụ, nói tôi có thư mục tài liệu tham khảo như sau (biểu tượng màu xanh, Nhóm có màu vàng):

enter image description here

Sau đó, tôi có thể truy cập các tập tin hình ảnh như thế này:

NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pin_images/1/2.jpg"]; 
UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 

Như một ghi chú bên, số tương đương pathForResource:ofType:inDirectory: trông giống như sau:

NSString * filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg" inDirectory:@"pin_images/1/"]; 
+0

cảm ơn. làm việc tốt –

Các vấn đề liên quan