2011-08-01 11 views
6

Estoy tratando de establecer las fechas de creación y modificación en un archivo.Establecer NSFileCreationDate no tiene ningún efecto

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]; 

La fecha de modificación se ha modificado correctamente para el archivo. La fecha de creación no ha cambiado. ¿Por qué?

ret es cierto y err es nil. -attributesOfItemAtPath devuelve un diccionario que contiene ambas claves en timestampAttr y la fecha de modificación correcta (modificada) y la fecha de creación incorrecta (no modificada).

Editar: Usando OS X versión 10.6. El SDK base del proyecto Xcode es 10.5. El archivo está en el único disco duro de mi computadora (sin RAID), en una carpeta dentro de mi carpeta de inicio. El archivo está dentro de un paquete de aplicaciones si eso hace la diferencia.

Editar: Este sencillo ejemplo funciona:

#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; 
} 

me pega el código anterior en la aplicación originalmente Pregunté por, el establecimiento de atributos para el mismo archivo como el ejemplo sencillo (en el escritorio). Cuando el código está dentro de la aplicación, no funciona.

Editar: Bien, esto es una locura. El simple ejemplo anterior funcionaba (mi compañero de trabajo y yo lo vimos trabajando en mi computadora) pero ahora no funciona.

Respuesta

9

Después de jugar un poco más con el ejemplo simple, noté que solo funcionaba para los archivos que había modificado recientemente.

Pude obtener el ejemplo simple, así como el código original sobre el que preguntaba, para trabajar de forma consistente estableciendo la fecha de modificación antes de establecer la fecha de creación.

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]; 
0

¿Qué versión de OS X? ¿Dónde se encuentra el archivo de destino? ¿Cuál es el formato de disco del volumen en el que se encuentra el archivo? ¿Qué tipo de configuración tiene en su Mac (tiene una RAID de software por casualidad)?

Una prueba aquí en Mac OS X 10.7 con un archivo en mi escritorio, y HFS + funciona bien (ambas fechas se cambian a now).

He tenido algunos resultados extraños aquí en el pasado con algunas de las nuevas API NSFileManager. Por ejemplo, -copyItemAtPath:toPath:error: no conserva la fecha de creación del archivo al copiar archivos en volúmenes HFS +. Específicamente, la fecha de creación se borra en la copia, lo que equivale a una fecha en el año 1904.

Conocer más sobre su configuración puede ayudar a identificar la causa.

+0

Gracias. Ver mi edición – jlstrecker

Cuestiones relacionadas