在我的应用程序中,我下载了一个带有ASiHttpRequest的pdf文件,我有以下说明:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
[currentDownload setDownloadDestinationPath:[documentsDirectory stringByAppendingPathComponent:@"file.pdf"]];
它第一次工作正常,我可以打开这个文件.pdf,但是当我第二次下载这个pdf时,它似乎没有替换文件,而是进行了合并。
在我这样做之前,但它不起作用,问题出在哪里,或者从其路径中删除此文件的最佳方法是什么.pdf?
- (void) removeFile{
NSString *extension = @"pdf";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPDF = [paths objectAtIndex:0];
NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectoryPDF error:NULL];
NSEnumerator *e = [contents objectEnumerator];
NSString *filename;
while ((filename = [e nextObject])) {
if ([[filename pathExtension] isEqualToString:extension]) {
[fileManager removeItemAtPath:[documentsDirectoryPDF stringByAppendingPathComponent:filename] error:NULL];
}
}
}
编辑
现在我使用这种方法
- (void) removeFile{
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0]stringByAppendingString:@"/file.pdf"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSLog(@"Documents directory before: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]);
if([fileManager fileExistsAtPath:path] == YES)
{
NSLog(@"file exist and I delete it");
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:path error:&error];
NSLog(@"error:%@", error);
}
NSLog(@"Documents directory after: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]);
}
此方法识别目录中的 NSLog 中有"file.pdf"
NSLog(@"Documents directory before: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]);
但它崩溃后
"NSLog(@"file exist and I delete it");"
我在康索尔中只有一个"lldb"。
我使用此方法从本地缓存中删除pdf文件,只需进行一些修改,您就可以根据需要对其进行调整
- (void)removePDFFiles
{
NSFileManager *fileMngr = [NSFileManager defaultManager];
NSArray *cacheFiles = [fileMngr contentsOfDirectoryAtPath:[self cacheDirectory]
error:nil];
for (NSString *filename in cacheFiles) {
if ([[[filename pathExtension] lowercaseString] isEqualToString:@"pdf"]) {
[fileMngr removeItemAtPath:[NSString stringWithFormat:@"%@/%@", [self cacheDirectory], filename] error:nil];
}
}
}
很可能您在下载新文件之前没有删除该文件,并且 ASIHttpRequest 看到已经有一个同名文件并向其附加数据而不是替换该文件。我不确定 PDF 格式,但这通常不会导致合并的可读文件。无论如何,首先您需要使用文件管理器类为您提供的错误机制。传递 NULL 是不好的。很差。因此,创建一个 NSError 对象并将其传递给 contentsOfDirectoryAtPath
和 removeItemAtPath
方法,然后检查错误,确保操作成功完成。之后,您可能还需要检查扩展名大写,因为基于 Unix 的系统区分大小写(尽管模拟器不是,但设备是),并且不会根据您的代码删除example.PDF
文件。
尝试以下操作:
-(BOOL) removePDF
{
BOOL removeStatus = NO;
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSString* fileName = @"file.pdf"; //your file here..
NSString* filePath = [NSString stringWithFormat:@"%@/%@", docsDir, fileName];
if([[NSFileManager defaultManager] fileExistsAtPath:filePath] == YES)
{
removeStatus = [[NSFileManager defaultManager] removeItemAtPath:filePath];
}
return removeStatus;
}