我有一个应用程序,在该应用程序中录制声音文件并将其存储在应用程序文档目录中。如何从iPhone的文档目录中删除超过两天以上的文件
我想要的是,它应该只包含昨天和旧天文件,并从iPhone应用程序的文件夹中删除所有其他人。有没有办法做到这一点?
谢谢..
我有一个应用程序,在该应用程序中录制声音文件并将其存储在应用程序文档目录中。如何从iPhone的文档目录中删除超过两天以上的文件
我想要的是,它应该只包含昨天和旧天文件,并从iPhone应用程序的文件夹中删除所有其他人。有没有办法做到这一点?
谢谢..
请看下面的代码。
//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);
}
}
}
这是对的,但我想删除昨天之前创建的所有文件 – 2012-04-10 05:41:29
在这个它只会删除昨天的文件 – 2012-04-10 05:41:41
这是非常简单的做出必要的更改哟要。 – Vignesh 2012-04-10 06:04:59
如果你会搜索你很少会得到这个:
[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];
}
}
}
谢谢,但我不想删除所有文件,我想在昨天之前所有文件 – 2012-04-09 11:13:05
@DilshadAlmani:确保你给你的问题的正确标题。 – Devang 2012-04-09 11:17:04
同意Devang.Please提供正确和明确的描述。 – 2012-04-09 11:18:36
请检查下面的代码:
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]' – 2012-04-09 11:50:16
它的行,它的日期比较 – priyanka 2012-04-09 12:17:43
我仍然在努力与你的和Vignesh的代码 – 2012-04-09 12:19:01
**是你自己尝试过的事情** – Devang 2012-04-09 11:09:53
我一直在寻找得到的东西有关,但我没有发现任何这样 – 2012-04-09 11:11:13
重复? http://stackoverflow.com/questions/5935582/delete-all-files-and-folder-from-a-certain-folder – amleszk 2012-04-09 11:11:38