【发布时间】:2012-07-27 08:42:48
【问题描述】:
NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* url = [[fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSString* directory = [url path];
NSString* filePath = [directory stringByAppendingPathComponent:FILE_NAME];
if ([fileManager fileExistsAtPath:filePath])
{
[fileManager removeItemAtPath:filePath error:nil];
}
这是我的代码。执行时,文件被删除,但空间仍然被占用。这是将内容存储到文件中的代码。
NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* url = [[fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSString* directory = [url path];
NSString* filePath = [directory stringByAppendingPathComponent:FILE_NAME];
NSArray* oldArray = nil;
if ([fileManager fileExistsAtPath:filePath])
{
oldArray = [[NSArray alloc] initWithContentsOfFile:filePath];
[fileManager removeItemAtPath:filePath error:nil];
}
NSMutableArray* mergeArray = [[NSMutableArray alloc] initWithArray:arrayOfPersons];
[mergeArray addObjectsFromArray:oldArray];
if ( [mergeArray writeToFile:filePath atomically:YES]) NSLog(@"Written");
顺便说一句,存储一个只有 1 个对象的数组需要 1 MB(一个 NSDictionary 有 2 个键)。有没有更便宜的存储方式?
【问题讨论】:
-
我使用了这个确切的代码,它工作得很好。具有两个键和两个对象的字典也是 264 字节。
-
而不是 nil 将
NSError对象传递给[fileManager removeItemAtPath:filePath error:nil];以获取错误参数并检查它所说的内容。 -
你的意思是你执行了代码,文件存在吗?还是文件被删除但空间仍然被占用?
-
@cloosen,文件不存在,但空间仍然被占用
-
@borrrden,在我的例子中是 1MB,两个对象是一个 NSString 和一个 NSNumber。代码工作正常,但空间仍然被占用。
标签: ios nsfilemanager