iOS - 如何有选择地删除文档目录中超过一个月的文件

Lou*_*uie 6 iphone objective-c ios iphone-4

我正在将图像下载到我的应用程序,几周之后用户就不会关心了.我将它们下载到应用程序中,这样就不必每次发布都下载它们.问题是我不希望Documents文件夹变得比它随时间变大.所以我认为我可以"清理"超过一个月的文件.

问题是,那里会有一些文件会超过一个月,但我不想删除.它们将是静态命名文件,因此它们很容易识别,只有3或4个.虽然我想删除几十个旧文件.这是一个例子:

picture.jpg           <--Older than a month DELETE
picture2.jpg          <--NOT older than a month Do Not Delete
picture3.jpg          <--Older than a month DELETE
picture4.jpg          <--Older than a month DELETE
keepAtAllTimes.jpg    <--Do not delete no matter how old
keepAtAllTimes2.jpg   <--Do not delete no matter how old
keepAtAllTimes3.jpg   <--Do not delete no matter how old
Run Code Online (Sandbox Code Playgroud)

我怎样才能有选择地删除这些文件?

提前致谢!

roh*_*tel 12

用于删除超过两天的文件的代码.原来我在这里回答.我测试了它,它在我的项目中工作.

PS在删除Document目录中的所有文件之前要小心,因为这样做可能会丢失您的数据库文件(如果您正在使用.. !!),这可能会给您的应用程序带来麻烦.这就是为什么我保持条件在那里.:-))

// Code to delete images older than two days.
   #define kDOCSFOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

NSFileManager* fileManager = [[[NSFileManager alloc] init] autorelease];
NSDirectoryEnumerator* en = [fileManager enumeratorAtPath:kDOCSFOLDER];    

NSString* file;
while (file = [en nextObject])
{
    NSLog(@"File To Delete : %@",file);
    NSError *error= nil;

    NSString *filepath=[NSString stringWithFormat:[kDOCSFOLDER stringByAppendingString:@"/%@"],file];


    NSDate   *creationDate =[[fileManager attributesOfItemAtPath:filepath error:nil] fileCreationDate];
    NSDate *d =[[NSDate date] dateByAddingTimeInterval:-1*24*60*60];

    NSDateFormatter *df=[[NSDateFormatter alloc]init];// = [NSDateFormatter initWithDateFormat:@"yyyy-MM-dd"];
    [df setDateFormat:@"EEEE d"]; 

    NSString *createdDate = [df stringFromDate:creationDate];

     NSString *twoDaysOld = [df stringFromDate:d];

    NSLog(@"create Date----->%@, two days before date ----> %@", createdDate, twoDaysOld);

    // if ([[dictAtt valueForKey:NSFileCreationDate] compare:d] == NSOrderedAscending)
    if ([creationDate compare:d] == NSOrderedAscending)

    {
        if([file isEqualToString:@"RDRProject.sqlite"])
        {

            NSLog(@"Imp Do not delete");
        }

        else
        {
             [[NSFileManager defaultManager] removeItemAtPath:[kDOCSFOLDER stringByAppendingPathComponent:file] error:&error];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)