Objective c fopen在ios上的怪异行为

Objective c fopen在ios上的怪异行为,objective-c,c,ios,Objective C,C,Ios,我正试图用fopen创建一个文件,然后写它,但奇怪的事情发生了 当我将iphone插入usb端口时。一切正常。将在tmp目录或文档目录中创建一个文件 当我拔下设备并做同样的事情时,文件没有出现。我想知道为什么 我使用fopen创建文件。在我的例子中,我应该这样做来创建并写入文件。调用为fopen(pcm_输出,“wb+”) 你可能在沙箱之外写作,你能发布路径吗? 就像一个测试尝试为你的应用打开iTunes共享一样(这应该没有效果,这只是一个测试) 编辑: 测试后,我发现您必须使用: NSStri

我正试图用fopen创建一个文件,然后写它,但奇怪的事情发生了

  • 当我将iphone插入usb端口时。一切正常。将在tmp目录或文档目录中创建一个文件
  • 当我拔下设备并做同样的事情时,文件没有出现。我想知道为什么

  • 我使用fopen创建文件。在我的例子中,我应该这样做来创建并写入文件。调用为fopen(pcm_输出,“wb+”)

    你可能在沙箱之外写作,你能发布路径吗? 就像一个测试尝试为你的应用打开iTunes共享一样(这应该没有效果,这只是一个测试)

    编辑:

    测试后,我发现您必须使用:

    NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [docsPath stringByAppendingPathComponent:[NSString stringWithCString:pcm_output encoding:NSUTF8StringEncoding]];    
    fopen([filePath UTF8String], "wb+");
    
    而不仅仅是:

    fopen([filePath UTF8String], "wb+");
    
    原始代码是这样的,其中tts_资源tts_log pcm_输出和wav_输出在.h文件中定义,并在带有fopen的.c文件中使用


    我曾尝试以您的方式使用显式const char*样式初始化const字符串,但问题仍然存在。

    您需要使用此调用

        char const *path = [fileManager fileSystemRepresentationWithPath:url.path];
    
    从文件中

    fileSystemRepresentationWithPath: -(const char*)fileSystemRepresentationWithPath:(NSString*)path

    iOS(2.0及更高版本)

    返回给定路径的C字符串表示形式,该路径正确编码Unicode字符串以供文件系统使用

    路径:包含文件路径的字符串对象。
    路径的C字符串表示形式,它正确地编码Unicode字符串以供文件系统使用。

    这是ios的代码还是正在插入的本机系统的代码?我想是的。或者即使插入也无法工作我也收到了这个“3月17日21:42:45未知通信中心[23]:MessageCenterModel告诉PDP上下文-1激活。3月17日21:42:45未知沙盒[3933]:ZhiJia_侦听(3916)拒绝文件写入创建/�6“您好,我在这个路径下写了这个文件”/var/mobile/Applications/ED98116B-BD1E-4319-B473-a699db6b86/Documents“我相信它在沙箱中。无论如何,我都会试试你的方法。谢谢@fbernardo,但它不起作用。我想知道它是否与越狱有关。谢谢,它有效。我想知道为什么这个方法有效,为什么NSUTF8StringEncoding不起作用。这将创建一个正确的编码,但是请记住,文件系统不喜欢任何字符。这就是为什么他们有一个特殊的方法来为文件系统生成char*版本。
        char const *path = [fileManager fileSystemRepresentationWithPath:url.path];