2010-01-21 30 views
23

¡Tengo un problema muy extraño! Me pregunto si el problema está en el marco, OS o tal vez soy solo yo, malentendiendo las cosas ...Increíble problema de creación de archivos extraño

Tengo un archivo, que podría haber sido creado hace mucho tiempo, lo uso, y luego quiero archivarlo, cambiando su nombre. Luego quiero crear un nuevo archivo, con el mismo nombre que tenía el archivo anterior, antes de que se cambiara de nombre. ¡Suficientemente fácil!

El problema que realmente me desconcierta, es que el archivo recién creado se equivoca "creado" -timestamp! Eso es un problema ya que es esa marca de tiempo que quiero usar para determinar cuándo archivar y crear un nuevo archivo.

He creado una muestra muy pequeña que muestra el problema. Para que la muestra funcione, debe haber un archivo 1.txt en la carpeta Archivos. Además, el atributo del archivo también debe estar atrás en el tiempo (con una de las herramientas disponibles, yo uso Nomad.NET).

static void Main(string[] args) 
    { 
     // Create a directory, if doesnt exist. 
     string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\Files"; 
     Directory.CreateDirectory(path); 

     // Create/attach to the 1.txt file 
     string filename = path + "\\1.txt"; 
     StreamWriter sw = File.AppendText(filename); 
     sw.WriteLine("testing"); 
     sw.Flush(); 
     sw.Close(); 
     // Rename it... 
     File.Move(filename, path + "\\2.txt"); 

     // Create a new 1.txt 
     sw = File.AppendText(filename); 
     FileInfo fi = new FileInfo(filename); 
     // Observe, the old files creation date!! 
     Console.WriteLine(String.Format("Date: {0}", fi.CreationTime.Date)); 

     Console.ReadKey(); 
    } 
+2

Finalmente, lo resolvé después de crear el archivo (con la marca de tiempo incorrecta/antigua), lo cambié "manualmente" al configurar el FileInfo.CreationTime = DateTime.Now. – kaze

Respuesta

27

Este es el resultado de una "característica" arcana que se remonta a los viejos tiempos de Windows. Los detalles básicos son aquí:

Básicamente, esto es a propósito. Pero es configurable y un anacronismo en la mayoría del software actual.

I think primero puede crear un nuevo nombre de archivo, luego renombrar viejo-> viejo.1, luego nuevo-> viejo, y "funcionará". No recuerdo honestamente lo que hicimos cuando nos encontramos con esto hace unos años.

+0

Gracias, este es exactamente mi problema. Nunca oí de eso antes. Ahora, probablemente pueda encontrar una solución cambiando el nombre a un nombre aleatorio temporal. – kaze

8

Recientemente me encontré con el mismo problema descrito en la pregunta. En nuestro caso, si nuestro archivo de registro es anterior a una semana, lo borramos y comenzamos uno nuevo. Sin embargo, ha mantenido la misma fecha creada desde 2008.

Una respuesta aquí describe el cambio de nombre del archivo anterior y luego la creación de uno nuevo, con suerte recogiendo la fecha de creación adecuada. Sin embargo, eso no fue exitoso para nosotros, mantuvo la fecha antigua todavía.

Lo que utilizamos fue el método File.SetCreationTime, y como su nombre lo indica, nos permite controlar fácilmente la fecha de creación del archivo, permitiéndonos configurarlo en DateTime.Now. El resto de nuestra lógica funcionó correctamente después.

2

File.SetCreationTime ("archivo", DateTime.Now);

Cuestiones relacionadas