我正在尝试在文件上设置创建和修改日期。
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDate *now = [NSDate date];
NSDictionary *timestampAttr = [NSDictionary dictionaryWithObjectsAndKeys:
now, NSFileCreationDate, now, NSFileModificationDate, nil];
BOOL ret = [fileManager setAttributes:timestampAttr ofItemAtPath:path error:&err];
已成功修改文件的修改日期。创建日期不变。为什么?
ret
为真,err
为零。 -attributesOfItemAtPath
返回一个字典,其中包含timestampAttr
中的键和正确(修改)的修改日期以及不正确(未修改)的创建日期。
编辑:使用OS X版本10.6。 Xcode项目的基础SDK是10.5。文件位于我的计算机上唯一的硬盘驱动器(无RAID),位于我的主文件夹内的文件夹中。 如果文件有所不同,该文件位于应用程序包内。
编辑:这个简单示例有效:
#import <Cocoa/Cocoa.h>
int main(void)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSFileManager *m = [NSFileManager defaultManager];
NSString *path = ...;
[m setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSDate date],NSFileCreationDate,nil] ofItemAtPath:path error:nil];
[pool drain];
return 0;
}
我将上面的代码粘贴到我最初询问的应用程序中,设置与简单示例相同的文件的属性(在我的桌面上)。当代码在应用程序内部时,它不起作用。
编辑:好的,这很疯狂。上面的简单示例正在工作(我的同事和我都看到它在我的计算机上工作)但现在它不起作用。
答案 0 :(得分:9)
在玩了一些简单的例子之后,我注意到它只适用于我最近修改过的文件。
我能够通过在设置创建日期之前设置修改日期来获得简单的示例,以及我要求的原始代码。
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDate *now = [NSDate date];
NSDictionary *creationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileCreationDate, nil];
NSDictionary *modificationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileModificationDate, nil];
[fileManager setAttributes:modificationDateAttr ofItemAtPath:path error:&err];
[fileManager setAttributes:creationDateAttr ofItemAtPath:path error:&err];
答案 1 :(得分:0)
什么版本的OS X?目标文件位于何处?文件所在卷的磁盘格式是什么?你在Mac上有什么样的设置(你有没有软件RAID)?
在我的桌面上使用文件在Mac OS X 10.7中进行测试,HFS +工作正常(两个日期都更改为now
)。
过去我在一些较新的NSFileManager
API中遇到了一些奇怪的结果。例如,在HFS +卷上复制文件时,-copyItemAtPath:toPath:error:
不会保留文件创建日期。具体而言,创建日期在副本中清除,这相当于1904年的日期。
了解有关您的设置的更多信息可能有助于查明原因。