Я пытаюсь получить свой файл в моем собственном создал каталог в каталоге документов в NSData объект, как это:Получить файл из директории в NSData
NSString *path = [documentsDirectory stringByAppendingFormat:@"%@%@",@"/",fileName];
NSError* errorr = nil;
NSData *fileData = [NSData dataWithContentsOfFile:path options: 0 error: &errorr];
if (fileData == nil)
{
NSLog(@"Failed to read file, error %@", errorr);
}
else
{
}
Но я всегда получаю эту ошибку:
Failed to read file, error Error Domain=NSCocoaErrorDomain Code=257 "The operation couldn’t be completed. (Cocoa error 257.)" UserInfo=0x156be110 {NSFilePath=/var/mobile/Applications/679253E3-652C-45EE-B589-609E52E4E3B0/Documents/upload/test.xml, NSUnderlyingError=0x156ba7f0 "The operation couldn’t be completed. Permission denied"}
так что, если я проверить, является ли файл для чтения:
if ([[NSFileManager defaultManager] isReadableFileAtPath: path] == YES)
NSLog (@"File is readable");
else
NSLog (@"File is read only");
я получить результат, что файл является читаемым, так почему я получаю ошибка, если я хочу проанализировать этот файл в NSData ?!
UPDATE: я создал свой файл, например так:
NSString *filePath = [self dataFilePath:fileName];
[xmlData writeToFile:filePath atomically:YES];
- (NSString *)dataFilePath: (NSString *) path {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"upload"];
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory])
[[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:&error];
NSString *documentsPath = [documentsDirectory
stringByAppendingPathComponent:path];
return documentsPath;
}
UPDATE2: После создания файла, я переместить его в другой каталог с помощью этой функции:
- (void)moveXmlFilesToUploadDirectory
{
@try {
//Check if FILES_DIR exists
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:FILES_DIR];//filesDir
NSString *uploadDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:UPLOAD_DIR];//filesDir
if ([[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory])
{
NSString *extension = @"xml";
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:NULL];
NSEnumerator *e = [contents objectEnumerator];
NSString *filename;
while ((filename = [e nextObject])) {
if ([[filename pathExtension] isEqualToString:extension]) {
[[NSFileManager defaultManager] moveItemAtPath:documentsDirectory toPath:[uploadDirectory stringByAppendingPathComponent:filename] error:NULL];
}
}
}
}
@catch (NSException *exception) {
}
@finally {
}
}
Может быть, проблема после переезда файл! Причина, если я пытаюсь получить файл в NSData, прежде чем переместить его, все работает ...
Вы можете поделиться своим методом 'documentsDirectory'? –
Это не метод, это путь (NSString)! Я создаю его следующим образом: NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentsDirectory = [[paths objectAtIndex: 0] stringByAppendingPathComponent: @ "upload"]; – davidOhara
Используйте 'stringByAppendingPathComponent, а не stringByAppendingFormat. –