我正在尝试为我的应用程序的每次执行编写一个简单的日志文件.日志文件名基于当前时间并存储在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目录中.
您正在尝试在应用程序包内创建一个文件,该文件在设备上是只读的.将您的文件放入应用程序的Documents或Library目录中.
您正在尝试在无权创建文件的位置创建文件,
在文档文件夹中创建文件,
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];