IOS:删除目录中的文件

时间:2012-11-23 11:09:46

标签: ios nsdocumentdirectory

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

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

它第一次工作正常,我可以打开这个文件.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”在consolle。

3 个答案:

答案 0 :(得分: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];
        }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分: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;
}