当前位置:  开发笔记 > IOS > 正文

NSFileManager createFileAtPath在iPad上失败但在Simulator上运行

如何解决《NSFileManagercreateFileAtPath在iPad上失败但在Simulator上运行》经验,为你挑选了2个好方法。

我正在尝试为我的应用程序的每次执行编写一个简单的日志文件.日志文件名基于当前时间并存储在app目录中.下面的代码是我正在尝试在模拟器上运行的代码,但是当我在iPad上执行时它失败并且"不允许操作"(errno.h中的EPERM).

-(BOOL)CreateLogFile
{
    mLogFilePath = [self GetLogFileNameForTimeNow];
    BOOL Success = [[NSFileManager defaultManager] createFileAtPath:mLogFilePath contents:nil attributes:nil];

    /*BOOL Success = [[NSFileManager defaultManager] createFileAtPath:mLogFilePath contents:nil attributes:[NSDictionary dictionaryWithObject:NSFileProtectionComplete
                                                                                                                                     forKey:NSFileProtectionKey]];*/

    if ( Success )
    {
        NSLog( @"Successfully created file: %@", mLogFilePath );
        mLogFileHandle = [NSFileHandle fileHandleForWritingAtPath:mLogFilePath];
        [self WriteInstanceInformationToLog];
    }
    else
    {
        NSLog( @"Failed to create file: %@ %s", mLogFilePath, strerror(errno) );
    }

    return Success;
}

我也尝试了注释掉的代码,但也失败了.我是iOS编程的新手,所以可能会遗漏一些基本的东西.无论如何,上面的输出形式在iPad上显示如下:

2013-05-10 14:54:51.794 RichTest1[128:907] Failed to create file:
/var/mobile/Applications/XXXX/RichTest1.app/20130510145451.log Operation not permitted

但在模拟器上它的工作原理:

2013-05-10 15:07:14.696 RichTest1[1604:c07] Successfully created file:
Users/abruce/Library/Application Support/iPhone Simulator/6.1/Applications/XXXX/RichTest1.app/20130510150714.log

我哪里错了?

--edit这是代码 GetLogFileNameForTimeNow

-(NSString*)GetLogFileNameForTimeNow
{
    NSString* FileName = [NSString stringWithFormat:@"%@.log", [self GetTimeAsString] ];
    NSString* AppFolderPath = [[NSBundle mainBundle] resourcePath];
    return [NSString stringWithFormat:@"%@/%@", AppFolderPath, FileName];
}

-(NSString*)GetTimeAsString
{
    return [mDateFormatter stringFromDate:[NSDate date]];
}

并且我的类的构造函数中的日期格式化程序设置如下:

mDateFormatter = [[NSDateFormatter alloc] init];
NSString* DateFormat = @"yyyyMMddHHmmss";
[mDateFormatter setDateFormat:DateFormat];

Jeepston.. 12

您正在尝试在应用程序包内创建一个文件,该文件在设备上是只读的.将您的文件放入应用程序的Documents或Library目录中.



1> Jeepston..:

您正在尝试在应用程序包内创建一个文件,该文件在设备上是只读的.将您的文件放入应用程序的Documents或Library目录中.



2> Thilina Cham..:

您正在尝试在无权创建文件的位置创建文件,

在文档文件夹中创建文件,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"20130510150714.log"];
BOOL Success = [[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有