IOS:删除目录中的文件



在我的应用程序中,我下载了一个带有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 对象并将其传递给 contentsOfDirectoryAtPathremoveItemAtPath 方法,然后检查错误,确保操作成功完成。之后,您可能还需要检查扩展名大写,因为基于 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;
}

最新更新