我试图在iOS应用程序中使用库(cfitsio),该应用程序严重依赖于使用文件指针来打开和维护对数据文件的访问。我已经成功地构建了一个Objective-C Mac应用程序,它可以做我需要在iOS上做的事情。Cocoa touch有方法将文件加载到NSData中,但我没有看到直接获取文件指针,可能是因为iOS上文件系统的隐私更严格。是否有一种方法可以直接获得文件指针或使用NSData使文件指针与库临时使用?
下面声明了我将用来打开文件的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 */
尝试使用在打开文件时创建NSFileHandle
的NSFileManager
。这个句柄有一个fileDescriptor
的getter:
Returns the file descriptor associated with the receiver.
- (int)fileDescriptor
Return Value
The POSIX file descriptor associated with the receiver.
参见NSFileHandle
似乎这个库声明了一个类型"fitsfile"并使用指针"fitsfile *"。
函数ffopen看起来很像,它打开文件并创建fitsfile*,它使用fitsfile**返回。所以你完全不用担心这些文件,库会做的。所以你可能会写像 这样的东西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);
由于该库希望将数据存储在具有路径的文件中,因此唯一的方法是将数据存储在文件中,并将该文件的路径传递给ffopen。