【问题标题】:Using file pointers in Objective-C for iOS在 iOS 的 Objective-C 中使用文件指针
【发布时间】:2013-01-08 21:23:04
【问题描述】:

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

【问题讨论】:

    标签: objective-c c cocoa-touch cocoa file


    【解决方案1】:

    尝试使用NSFileManager,它会在您打开文件时创建NSFileHandle。 这个句柄有一个 fileDescriptor 的吸气剂:

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

    另见NSFileHandle

    【讨论】:

      【解决方案2】:

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

      ffopen 函数看起来很像 it 打开文件并创建 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。

      【讨论】:

      • 一般来说,使用-fileSystemRepresentation(不是-UTF8String)来获取一个C字符串以传递给一个需要文件路径的C API。
      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2012-03-08
      相关资源
      最近更新 更多