如何从 iPhone 的文档目录中删除超过两天的文件
Posted
技术标签:
【中文标题】如何从 iPhone 的文档目录中删除超过两天的文件【英文标题】:How to delete files from iPhone's document directory which are older more than two days 【发布时间】:2012-04-09 11:05:25 【问题描述】:我有一个应用程序,我在其中录制声音文件并将其存储在应用程序文档目录中。
我想要的是,它应该只包含昨天和几天前的文件,并从 iPhone 应用程序的文件夹中删除所有其他文件。有没有办法做到这一点?
谢谢..
【问题讨论】:
你自己尝试过什么吗? 我一直在寻找相关的东西,但我没有找到类似的东西 重复:***.com/questions/5935582/… @DilshadAlmani:那么 amleszk 是如何发现重复的? 你有什么尝试? @Devang :我想。他没有问过重复的问题。他错过了正确的描述。 【参考方案1】:请看下面的代码。
//Get the Document directory path.
#define kDOCSFOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
//Delete files by iterating items of the folder.
NSFileManager* fm = [[[NSFileManager alloc] init] autorelease];
NSDirectoryEnumerator* en = [fm enumeratorAtPath:kDOCSFOLDER];
NSError* err = nil;
BOOL res;
NSString* file;
while (file = [en nextObject])
// Date comparison.
NSDate *creationDate = [[fm attributesOfItemAtPath:file error:nil] fileCreationDate];
NSDate *yesterDay = [[NSDate date] dateByAddingTimeInterval:(-1*24*60*60)];
if ([creationDate compare:yesterDay] == NSOrderedAscending)
// creation date is before the Yesterday date
res = [fm removeItemAtPath:[kDOCSFOLDER stringByAppendingPathComponent:file] error:&err];
if (!res && err)
NSLog(@"oops: %@", err);
【讨论】:
这是对的,但我想删除昨天之前创建的所有文件 这里只会删除昨天的文件 根据需要进行必要的更改非常简单!【参考方案2】:如果你很少搜索,你会得到这个:
[fileManager removeItemAtPath: fullPath error:NULL];
因此您可以使用以下方式获取文件的创建日期:
NSFileManager* fileManager = [NSFileManager defaultManager];
NSDictionary* dict = [fileManager attributesOfItemAtPath:filePath error:nil];
NSDate *date = (NSDate*)[dict objectForKey: NSFileCreationDate];
在 if 条件下比较这些日期并删除这些文件。
更新 1:删除超过两天的文件的工作代码。
// 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:-2*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];
【讨论】:
谢谢,但我不想删除前天所有文件我想要的所有文件 @DilshadAlmani :确保为您的问题提供正确的标题。 同意Devang。请提供正确和清晰的描述。【参考方案3】:请快速检查以下代码:
func cleanUp()
let maximumDays = 2.0
let minimumDate = Date().addingTimeInterval(-maximumDays*24*60*60)
func meetsRequirement(date: Date) -> Bool return date < minimumDate
func meetsRequirement(name: String) -> Bool return name.hasPrefix(applicationName) && name.hasSuffix("log")
do
let manager = FileManager.default
let documentDirUrl = try manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
if manager.changeCurrentDirectoryPath(documentDirUrl.path)
for file in try manager.contentsOfDirectory(atPath: ".")
let creationDate = try manager.attributesOfItem(atPath: file)[FileAttributeKey.creationDate] as! Date
if meetsRequirement(name: file) && meetsRequirement(date: creationDate)
try manager.removeItem(atPath: file)
catch
print("Cannot cleanup files: \(error)")
【讨论】:
【参考方案4】:请检查以下代码:
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil];
for (NSString *file in dirContents)
NSError *error= nil;
NSDictionary *dictAtt = [[NSFileManager defaultManager] attributesOfItemAtPath:/*file path*/ error:&error];
NSDate *d =[[NSDate date] dateByAddingTimeInterval:-86400];
if ([[dictAtt valueForKey:NSFileCreationDate] compare:d] == NSOrderedAscending)
[[NSFileManager defaultManager] removeItemAtPath:/*file path*/ error:&error];
【讨论】:
你的代码在这一行给出警告:` if ([[dictAtt valueForKey:NSFileCreationDate] compare:d]` 没关系,用于日期比较 @anonymous 现在有什么问题。 NSlog(%@,dictAtt);在 NSDate *d =[[NSDate date] dateByAddingTimeInterval:-86400] 之前添加这一行;这一行并检查显示的数据。以上是关于如何从 iPhone 的文档目录中删除超过两天的文件的主要内容,如果未能解决你的问题,请参考以下文章