我确实有一个非常奇怪的问题!我想知道问题是在框架中,操作系统还是仅仅是我,误解了一些事情......
我有一个文件,可能是很久以前创建的,我使用该文件,然后我想通过更改它的名称来存档它。然后我想在重命名之前创建一个与旧文件同名的新文件。够容易!
让我感到困惑的问题是,新创建的文件出错了“创建” - 时间戳!这是一个问题,因为它是我想用来确定何时存档和创建新文件的时间戳。
我创建了一个非常小的样本来显示问题。要使示例正常工作,Files文件夹中必须有一个文件1.txt。此外,还必须及时设置文件属性(使用其中一个工具,我使用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();
}
答案 0 :(得分:27)
这是一个神秘的“功能”可以追溯到Windows的旧时代。核心细节如下:
基本上,这是故意的。但它是可配置的,并且在今天的大多数软件中都是不合时宜的。
我认为你可以先创建一个新的文件名,然后重命名old-> old.1,然后重新命名为new-> old,它将“工作”。我真的不记得我们几年前遇到这种情况时做了什么。
答案 1 :(得分:8)
我最近遇到了问题中描述的同样问题。在我们的例子中,如果我们的日志文件超过一周,我们会删除它并开始一个新的。但是,它保持了自2008年以来创建的相同日期。
这里的一个答案描述了重命名旧文件然后创建一个新文件,希望获得正确的创建日期。然而,这对我们来说是不成功的,它仍旧保持旧日期。
我们使用的是File.SetCreationTime方法,顾名思义,它可以让我们轻松控制文件的创建日期,允许我们将其设置为DateTime.Now。其余的逻辑后来工作正常。
答案 2 :(得分:2)
File.SetCreationTime(“file”,DateTime.Now);