问题:
我想创建一个临时文件,用于保存我通过ALAssetLibrary
读取的资产中的RAW数据。但是,当我尝试通过NSFileManager
的{{1}}创建文件时,应用程序会停止并抛出[createFileAtPath:contents:attributes:]
。好吧,这个错误通常意味着我有一个破坏或错误的指针,但除了EXC_BAD_ACCESS
我设法成功运行了几次代码,但之后在iOS7 +下创建文件时每次崩溃都会崩溃。下面的iOS版本似乎能够创建和写入文件,但是一旦我尝试以任何方式访问它,就会出现同样的错误。
fileHandle IVAR.
容易出错的代码:
/private/var/mobile/Applications/83BFD709-3587-404D-97E7-BEAAA2860283/tmp/temp.tmp
下面是导致崩溃的部分。
- (NSString *)applicationTempDirectory
{
// NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
//NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString* basePath = NSTemporaryDirectory();
return basePath;
}
问题:
有没有人知道为什么这个看似简单的任务没有按预期工作?除了将任何属性设置为.... <NEW METHOD>
NSUInteger chunkSize = 1000 * 1024; //1MB chunks
ALAssetRepresentation* rep = [asset_ defaultRepresentation];
uint8_t chunkbuffer[chunkSize];
long long length = [rep size];
// Copy file
NSString* tempFile = [NSString stringWithFormat:@"%@/temp.tmp", [self applicationTempDirectory]];
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSFileHandle* fileHandle = [NSFileHandle fileHandleForWritingAtPath: tempFile];
if(!fileHandle) {
NSLog(@"File path_: %@", tempFile);
[fileMgr createFileAtPath:tempFile contents:nil attributes:nil]; //<--- Here it throws the exception
fileHandle = [NSFileHandle fileHandleForWritingAtPath:tempFile];
}
NSUInteger offset = 0;
do {
NSUInteger bytesCopied = [rep getBytes:chunkbuffer fromOffset:offset length:sizeof(chunkbuffer) error:nil];
offset += bytesCopied;
NSData *data = [[NSData alloc] initWithBytes:chunkbuffer length:bytesCopied];
[fileHandle writeData:data];
data=nil;
} while (offset < length);
[fileHandle closeFile];
fileHandle = nil;
.... <CONTINUES ON>
之外,我已尝试过几乎所有内容。我在网上搜索了所有内容,但似乎没有人像我一样遇到同样的问题。这里的一些SO很接近,但在尝试提供的解决方案后,它没有用......
答案 0 :(得分:0)
[fileMgr createFileAtPath:tempFile contents:nil attributes:nil];
您正在创建一个没有任何数据的文件。根据{{3}},虽然attributes
参数可以是nil
,但没有指定contents
。这可能是导致问题的原因。