1

在我的应用程序中,我下载了一个带有 ASiHttpRequest 的 pdf 文件,并且有以下说明:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [currentDownload setDownloadDestinationPath:[documentsDirectory stringByAppendingPathComponent:@"file.pdf"]];

第一次工作正常,我可以打开这个file.pdf,但是当我第二次下载这个pdf时,它似乎没有替换文件而是进行了合并。

在我这样做之前,但它不起作用问题出在哪里,或者从它的路径中删除这个 file.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”。

4

3 回答 3

3

我使用这种方法从本地缓存中删除 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];
        }
    }
}
于 2012-11-23T11:54:44.833 回答
0

很可能您在下载新文件之前没有删除该文件,并且 ASIHttpRequest 看到已经有一个同名文件并将数据附加到该文件而不是替换该文件。我不确定 PDF 格式,但这通常不会导致合并的可读文件。无论如何,首先您需要使用文件管理器类为您提供的错误机制。传递 NULL 是不好的。很坏。因此,创建一个 NSError 对象并将其传递给contentsOfDirectoryAtPathandremoveItemAtPath方法,然后检查错误,确保操作成功完成。之后,您可能还需要检查扩展名是否大写,因为基于 Unix 的系统区分大小写(尽管模拟器不区分,但设备区分)并且example.PDF不会根据您的代码删除文件。

于 2012-11-23T12:25:19.083 回答
0

尝试以下操作:

-(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;
}
于 2012-11-23T12:32:35.677 回答