6

我正在尝试在 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                       */
4

2 回答 2

5

尝试在打开文件时使用NSFileManagerwhich 创建a 。NSFileHandle这个句柄有一个吸气剂 fileDescriptor

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

另见NSFileHandle

于 2013-01-08T21:33:53.597 回答
2

似乎这个库声明了一个类型“fitsfile”并使用指针“fitsfile *”。

函数 ffopen 看起来很像打开文件并创建 fitfile*,它使用 fitfile** 返回。因此,您根本不必担心这些文件,库可以做到。

所以你可能会写类似

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。

于 2014-07-05T11:11:31.990 回答