如何在给定文件夹中仅保留十个最近的文件夹?

Posted

技术标签:

【中文标题】如何在给定文件夹中仅保留十个最近的文件夹?【英文标题】:How to keep only the ten most recent folders in a given folder? 【发布时间】:2013-11-07 12:15:15 【问题描述】:

我想删除给定文件夹中的所有文件夹,但最近的 10 个文件夹除外。

文件夹的年龄是其最年轻元素的年龄。

【问题讨论】:

【参考方案1】:
//
//  NSFileManager+KeepOnlyLastElements.m
//


#import "NSFileManager+KeepOnlyLastElements.h"

@implementation NSFileManager (KeepOnlyLastElements)



- (BOOL)keepOnlyLastElements:(NSUInteger)numberOfKeptElements
             ofFolderWithURL:(NSURL *)URLPathFolder ;

    BOOL isDirectory = NO ;

    [self fileExistsAtPath:URLPathFolder.path
               isDirectory:&isDirectory] ;

    if (isDirectory)
    
        NSArray * contentFolder = [self contentsOrderedByDateOfDirectoryAtPath:URLPathFolder] ;

        NSUInteger length = [contentFolder count] ;

        __block BOOL result = YES ;
        __block NSError * error ;

        [contentFolder enumerateObjectsUsingBlock:^(NSURL * currentURL, NSUInteger idx, BOOL *stop)
         
             if (length - idx > numberOfKeptElements)
             
                 if ([self removeItemAtURL:currentURL
                                     error:&error] == NO)
                 
                     *stop = YES ;
                     result = NO ;
                 ;
             
         ];

        if (!result)
        
            NSLog(@"Error ! %@", error) ;
        

        return result ;
    
    else
    
        NSLog(@"No foldet at URL %@", URLPathFolder) ;
        return NO ;
    






static  NSInteger contentsOfDirSort(NSURL *leftURL, NSURL *rightURL, void *ptr)

    (void)ptr;

    NSDate * dateLeft ;

    dateLeft = [[[NSFileManager defaultManager] attributesOfItemAtPath:leftURL.path
                                                                 error:NULL] valueForKey:NSFileModificationDate];

    NSDate * dateRight ;

    dateRight = [[[NSFileManager defaultManager] attributesOfItemAtPath:rightURL.path
                                                                 error:NULL] valueForKey:NSFileModificationDate];
    return [dateLeft compare:dateRight];







- (NSArray *)contentsOrderedByDateOfDirectoryAtPath:(NSURL *)URLOfFolder ;

    NSArray *files = [self contentsOfDirectoryAtPath:URLOfFolder.path
                                               error:NULL] ;

    return [files sortedArrayUsingFunction:contentsOfDirSort
                                   context:nil] ;


@end

【讨论】:

以上是关于如何在给定文件夹中仅保留十个最近的文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

保留目录十个最新文件

在 Git Commit 中仅克隆新上传的文件

批处理如何实现删除当前目录内最近修改时间3天以外的所有文件?

Ant / Groovy:如何删除超过给定日期的文件,但最多保留3个[重复]

php函数每日学习二十个(第六天)

如何从 Hiveql 中的 select over 语句中仅提取最近一周?