在Objective-C中使用fopen()

Using fopen() in Objective-C

本文关键字:fopen Objective-C      更新时间:2023-10-16

我对由于这段代码中的错误而导致的崩溃感到困惑:

                FILE *fid200;
                fid200 = fopen ( "Length200Vector.txt" , "w" );
                if (fid200 == NULL)
                    perror("Error opening Length200Vector.txt");
                for (int n = 0; n<200; n++) {
                    if (n == 0) {
                        fprintf (fid200, "%f", self.avgFeatureVect[0][n]);
                    }
                    else {
                    fprintf (fid200, ", %f", self.avgFeatureVect[0][n]);
                    }
                }
                fprintf (fid200, "n");
                fclose(fid200);

错误是:error open Length200Vector.txt: Operation not allowed .

该文件位于项目的Resources文件夹中,这一行在.mm文件中执行。在.cpp文件的同一项目中,我使用几乎完全相同的代码,运行没有问题。这个问题似乎无法解决……

谢谢

关于你的评论,这是一个iOS应用程序:你不能(iOS的沙箱)来执行修改 (fopen()"w")文件访问iOS应用程序中的任何事情除了文件位于您的应用程序"文档"目录(或通用应用程序资源~/图书馆/应用支持"包ID"目录和临时文件的目录返回调用NSTemporaryDirectory()函数[1])。

像这样访问"Documents"目录

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docs_dir = [paths objectAtIndex:0];

如果你已经有一个资源文件,你需要在应用程序的执行过程中修改,你必须先把它复制到"Documents"目录,然后再修改。

[1] http://developer.apple.com/library/ios/文档/FileManagement/概念/FileSystemProgrammingGUide/AccessingFilesandDirectories AccessingFilesandDirectories.html #//apple_ref/doc/uid/TP40010672-CH3-SW1