0

C# 精简版 6.5 的新功能。我正在尝试在一个似乎与实际系统时间相差 5 小时的文件上设置日期时间。我这样做只是为了创建文件:

        FileStream fs= File.Create(name);  

只要这样做,创建日期就会提前 5 小时......如果我尝试设置 CreationTime,我会收到一个编译错误,说属性是只读的,真的吗?

        FileInfo fi = new FileInfo(name);
        fi.CreationTime = date;

所以我的问题是,由于我是 C# 新手,您如何访问 CE 框架中的“只读”属性?我看到提到 P/Invoke,但似乎只适用于方法而不是属性。任何人都可以快速演示如何做到这一点?

我已经尝试过这个解决方案,即使我在当前本地时间发送文件,它仍然会写入 UTC

4

2 回答 2

1

我刚刚跑了这个:

[MTAThread]
static void Main()
{
    var name = "\\foo.txt";
    var info = new FileInfo(name);
    using (info.Create()) { }
    info.Refresh();
    var createTime = info.CreationTime;
    var now = DateTime.Now;
    var delta = now - createTime;
    Debug.WriteLine(delta.ToString());
}

并得到了这个输出:

00:00:00.0140000

这对我来说似乎是正确的。

于 2011-08-22T18:37:39.930 回答
0

您不能修改文件的 CreationTime。它在创建文件时设置一次且仅一次。如果你愿意使用 P/Invoke 来设置时间,你可以看看这个类似的问题 - c# - Change file LastWriteDate in Compact Framework

但是,您应该解决根本原因,而不是解决问题。如果文件的创建时间有问题,我会考虑检查您系统的时间设置(包括时区)。

于 2011-08-22T16:40:57.913 回答