C# x64上的文件时间
我将此文件时间结构用于互操作:C# x64上的文件时间,c#,.net,c++,winapi,interop,C#,.net,C++,Winapi,Interop,我将此文件时间结构用于互操作: [StructLayout(LayoutKind.Explicit)] public struct FILETIME { [FieldOffset(0)] public int dwLowDateTime; [FieldOffset(4)] public int dwHighDateTime; [FieldOffset(0)] public long QuadDateTime; } 它似乎可以在x86上工作(现在无
[StructLayout(LayoutKind.Explicit)]
public struct FILETIME
{
[FieldOffset(0)]
public int dwLowDateTime;
[FieldOffset(4)]
public int dwHighDateTime;
[FieldOffset(0)]
public long QuadDateTime;
}
它似乎可以在x86上工作(现在无法测试),但它可以在x64上工作。我正在使用quadpart在DateTime和FILETIME之间进行转换。应该可以。无论底层架构(x86或x64)如何,数据类型的大小在.NET中都是固定的。您的结构的大小将始终为8字节。它可以在x64上工作,但可能无法在其他处理器体系结构上工作(例如,如果您关心IA64)
在win32中,文件时间是4字节对齐的。如果您运行的体系结构要求64位
长
为8字节对齐,则访问QuadDataTime字段可能会导致异常。使用操作系统结构时,如果使用Int32
和Int64
而不是int
和long
,您将避免很多混乱。为什么访问64位覆盖会导致异常?如果指针未对齐8字节,并且体系结构需要对齐,则可能会导致对齐错误。有关FILETIME,请参阅MSDN文档,其中明确警告不要将指向FILETIME的指针强制转换为_int64*。