2010-01-21 11 views
23

Ich habe wirklich ein sehr seltsames Problem! Ich frage mich, ob das Problem im Rahmen ist, OS oder vielleicht ist es nur ich, Dinge falsch zu verstehen ...Unglaublich seltsame Datei Erstellungszeit Problem

Ich habe eine Datei, die vor langer Zeit erstellt werden könnte, verwende ich die Datei, und dann möchte ich Archivieren Sie es, indem Sie seinen Namen ändern. Dann möchte ich eine neue Datei mit demselben Namen wie die alte Datei erstellen, bevor sie umbenannt wurde. Leicht genug!

Das Problem, das mir wirklich ein Rätsel, ist, dass die neu erstellte Datei falsch bekommt „erstellt“ -timestamp! Das ist ein Problem, da ich mit diesem Zeitstempel festlegen möchte, wann eine neue Datei archiviert und erstellt werden soll.

Ich habe eine sehr kleine Stichprobe erstellt, der das Problem zeigt. Damit das Beispiel funktioniert, muss im Ordner "Dateien" eine Datei 1.txt vorhanden sein. Außerdem muss das Dateiattribut auch zeitlich zurückgesetzt werden (bei einem der verfügbaren Tools verwende ich 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

Schließlich löste ich es durch, nachdem die Datei (mit der falschen/alten Zeitstempel) erstellt wurde, änderte ich es „von Hand“ durch die FileInfo.CreationTime = DateTime.Now Einstellung. – kaze

Antwort

27

Dies ist das Ergebnis einer geheimnisvollen "Funktion", die weit in die alten Zeiten von Windows zurückgeht. Der Kern Details sind hier:

Im Grunde ist dies absichtlich. Aber es ist konfigurierbar und ein Anachronismus in den meisten heutigen Software.

I denken Sie Sie können zuerst einen neuen Dateinamen erstellen, dann umbenennen alt-> alt.1, dann neu-> alt, und es wird "arbeiten". Ich erinnere mich nicht ehrlich, was wir getan haben, als wir vor ein paar Jahren in diese letzten Jahre hineingerannt sind.

+0

Danke, das ist genau mein Problem. Ich habe noch nie davon gehört. Jetzt kann ich wahrscheinlich einen Workaround finden, indem ich in einen temporären zufälligen Namen umbenenne. – kaze

8

ich vor kurzem lief in das gleiche Problem in der Frage beschrieben. In unserem Fall, wenn unsere Protokolldatei älter als eine Woche ist, löschen wir sie und starten eine neue Datei. Aber es ist schon hält das gleiche Datum erstellt seit 2008

Einer Antwort hier beschreibt die alte Datei umbenennen und dann einen neuen zu schaffen, hoffentlich das richtige Erstellungsdatum Abholung. Das war jedoch für uns nicht erfolgreich, es hat das alte Datum immer noch behalten.

Was wir verwendet haben, war die File.SetCreationTime-Methode, und wie der Name schon sagt, lassen Sie uns leicht das Erstellungsdatum der Datei steuern, so dass wir es auf DateTime.Now einstellen können. Der Rest unserer Logik funktionierte danach korrekt.

2

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