2013-01-08 27 views
5

Tôi đang cố gắng sử dụng thư viện (cfitsio) trong ứng dụng iOS phụ thuộc nhiều vào việc sử dụng con trỏ tệp để mở và duy trì quyền truy cập vào tệp dữ liệu. Tôi đã xây dựng thành công một ứng dụng Mac Objective-C thực hiện những gì tôi cần làm trên iOS. Cocoa touch có phương pháp để tải một tập tin vào NSData nhưng tôi không thấy anyway để có được một con trỏ tập tin trực tiếp, có lẽ vì sự riêng tư nghiêm ngặt xung quanh hệ thống tập tin trên iOS. Có cách nào để có được một con trỏ tập tin trực tiếp hoặc sử dụng NSData để làm cho một con trỏ tập tin để sử dụng tạm thời với thư viện?Sử dụng con trỏ tập tin trong Objective-C cho iOS

Chức năng c tôi sẽ sử dụng để mở tệp được khai báo bên dưới. Con trỏ tập tin tiếp tục được sử dụng trong nhiều chức năng thư viện khác.

int ffopen(fitsfile **fptr,  /* O - FITS file pointer     */ 
      const char *name,  /* I - full name of file to open   */ 
      int mode,    /* I - 0 = open readonly; 1 = read/write */ 
      int *status);   /* IO - error status      */ 

Trả lời

5

Hãy thử sử dụng NSFileManager để tạo tệp NSFileHandle khi bạn mở tệp. xử lý này có một getter cho fileDescriptor:

Returns the file descriptor associated with the receiver. 
- (int)fileDescriptor 
Return Value 
The POSIX file descriptor associated with the receiver. 

cũng thấy NSFileHandle

+0

Chúc may mắn với điều đó. – gnasher729

2

Dường như thư viện này tuyên bố một loại "fitsfile" và sử dụng con trỏ "fitsfile *".

Chức năng ffopen trông rất giống mở tệp và tạo tệp phù hợp * mà nó trả về bằng cách sử dụng một tệp phù hợp **. Vì vậy, bạn không phải lo lắng về những tập tin này ở tất cả, thư viện hiện nó.

Vì vậy, bạn có thể muốn viết một cái gì đó giống như

NSString* path = <Objective-C code to get a path>; 
BOOL readOnly = <YES or NO, your choice> 
fitsfile* fptr = NULL; 
int fstatus = 0; 
int fresult = ffopen (&fptr, path.UTF8String, (readonly ? 0 : 1), &fstatus); 

Kể từ thư viện này muốn các dữ liệu lưu trữ trong một tập tin mà có một con đường, cách duy nhất để làm điều này là để lưu trữ các dữ liệu trong một tập tin và chuyển đường dẫn đến tệp đó tới ffopen.

+1

Nói chung, sử dụng '-fileSystemRepresentation' (không phải' -UTF8String') để nhận chuỗi C để chuyển tới một API C mong đợi một đường dẫn tệp. –

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