2011-08-22 69 views
0

C#精简版6.5新增功能。我试图将文件的日期时间设置为与实际系统时间相差5小时的文件。我这样做只是这个创建文件:C#P /调用属性

 FileStream fs= File.Create(name); 

只是在做这个创建日期是超前5小时...如果我尝试设置CREATIONTIME我得到一个编译错误说属性为只读,严重?

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

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

我已经试过这solution,仍然可以得到文件写入UTC即使我把它当前的本地时间

+2

考虑*防止*问题,而不是“修复”它。我首先回答以下问题:在您的时区,UTC的偏移量是多少? –

+0

我在中央系统时区设置为中央,所以不知道它为什么创建文件并将其设置为UTC。 – JPM

回答

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

这似乎是正确的我。

+0

调试输出中的显示时间正确,但是当我使用Windows文件资源管理器查看创建时间时,日期再次比我的本地时间早5小时。 – JPM

+0

所以文件资源管理器是“bug”。它显示UTC时间,而不是当地时间。 – ctacke

+0

大声笑或文件浏览器是正确的,行政长官正在翻译实际日期...谁知道在这一点上? – JPM

0

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

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

+0

是的,我试过这种方法,它不起作用,所以我再次问它,所以你可以请求在我的问题上取消投票吗? – JPM