C#P / Invoke属性

时间:2011-08-22 16:37:50

标签: c# windows-mobile compact-framework pinvoke creation

C#Compact Edition 6.5的新功能。我试图在一个文件上设置日期时间,该文件似乎与实际系统时间相差5小时。我只是这样做来创建文件:

        FileStream fs= File.Create(name);  

正好这样创建日期提前5个小时...如果我尝试设置CreationTime,我会收到编译错误,说属性是Readonly,认真吗?

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

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

我已经尝试了这个 solution ,即使我发送当前的当地时间,仍然会收到写入UTC的文件

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

您无法修改文件的CreationTime。创建文件时只设置一次。如果您愿意使用P / Invoke设置时间,可以查看类似的问题 - c# - Change file LastWriteDate in Compact Framework

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