使用URLConnection我正在从URL下载文件并将该数据存储到文档目录中的文件中。当我收到响应时,当调用didReceiveResponse:方法时,我创建文件并以这种方式移动到该文件的末尾:
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:self.fileName];
NSLog(@"filepath is %@",filePath);
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
file = [[NSFileHandle fileHandleForUpdatingAtPath:filePath] retain];
[file seekToEndOfFile];
其中File是NSFileHandle类的对象。稍后在接收数据时,每当调用didReceiveData:(NSData *)数据方法时,我都会以这种方式将接收到的数据存储到文件中:
[file seekToEndOfFile];
[file writeData:data];
最后,我以这种方式在connectionDidFinishLoading:方法中关闭文件:
[file closeFile];
当我在我的系统中构建和运行时,它正在工作。但是当我复制到另一个系统并试图构建时,我得到了这个错误:
Terminating app due to uncaught exception `'NSFileHandleOperationException'`, reason: '*** `-[NSConcreteFileHandle seekToEndOfFile]: No such file or directory'`
我提到了http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OS和 What is NSSearchPathForDirectoriesInDomains?了解NSSearchPathForDirectoriesInDomain函数,但我还不清楚。
UserDomainMask
将根据项目所在的系统和用户返回正确的路径。如果是这样,为什么我会收到这样的错误?
他们说返回的路径(存储在filepath中)将是路径/ Users // Library / Application Support / iPhone Simulator / User / Application // Documents where
是当前登录到运行模拟器的Mac OS X系统的用户名,是该应用的唯一ID
任何人都可以帮助我,理解为什么我会收到这样的错误。
答案 0 :(得分:7)
在您的要求中没有源代码并且您显示异常 所以我们有这些写作和阅读的道路。并分享你的用途?
文档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
库
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
缓存目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
[[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}
对于阅读和写作,您可以使用路径。有关详情,请参阅此Answer
答案 1 :(得分:0)
-(NSString *) filePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSLog(@"documentsDir %@",documentsDir);
return [documentsDir stringByAppendingPathComponent:@"xxxxx.sql"];
}