private static unsafe void SetDateTime(string path, DateTime dateTime, DateTimeAttrib attrib, bool utc) { long rawFileTime = utc ? dateTime.ToFileTimeUtc() : dateTime.ToFileTime(); PathInternal.DllImport.FILETIME fileTime = new PathInternal.DllImport.FILETIME(); fileTime.dwLowDateTime = (uint)(rawFileTime & 0xFFFFFFFF); fileTime.dwHighDateTime = (uint)((rawFileTime >> 32) & 0xFFFFFFFF); IO.FileStream fs = OpenRead(path); switch (attrib) { case DateTimeAttrib.Access: PathInternal.DllImport.SetFileTime(fs.SafeFileHandle, (PathInternal.DllImport.FILETIME *) 0, &fileTime, (PathInternal.DllImport.FILETIME *) 0); break; case DateTimeAttrib.Creation: PathInternal.DllImport.SetFileTime(fs.SafeFileHandle, &fileTime, (PathInternal.DllImport.FILETIME *) 0, (PathInternal.DllImport.FILETIME *) 0); break; case DateTimeAttrib.Write: PathInternal.DllImport.SetFileTime(fs.SafeFileHandle, (PathInternal.DllImport.FILETIME *) 0, (PathInternal.DllImport.FILETIME *) 0, &fileTime); break; default: throw new Exception("Unknown DateTimeAttrib in File.SetDateTime() function"); } fs.Close(); }
private static DateTime GetDateTime(string path, DateTimeAttrib attrib, bool utc) { PathInternal.DllImport.WIN32_FILE_ATTRIBUTE_DATA fileData = new PathInternal.DllImport.WIN32_FILE_ATTRIBUTE_DATA(); if (PathInternal.DllImport.GetFileAttributesExW(PathInternal.ConvertToUnicodePath(path), 0, ref fileData)) { switch (attrib) { case DateTimeAttrib.Write: return(PathInternal.FILETIMEToDateTime(fileData.ftLastWriteTime, utc)); case DateTimeAttrib.Access: return(PathInternal.FILETIMEToDateTime(fileData.ftLastAccessTime, utc)); case DateTimeAttrib.Creation: return(PathInternal.FILETIMEToDateTime(fileData.ftCreationTime, utc)); default: throw new Exception("Unknown DateTimeAttrib in File.GetDateTime() function"); } } else { throw new IO.FileNotFoundException(path); } }
private static unsafe void SetDateTime( string path, DateTime dateTime, DateTimeAttrib attrib, bool utc ) { long rawFileTime = utc ? dateTime.ToFileTimeUtc() : dateTime.ToFileTime(); PathInternal.DllImport.FILETIME fileTime = new PathInternal.DllImport.FILETIME(); fileTime.dwLowDateTime = (uint)( rawFileTime & 0xFFFFFFFF ); fileTime.dwHighDateTime = (uint)( ( rawFileTime >> 32 ) & 0xFFFFFFFF ); IO.FileStream fs = OpenRead( path ); switch ( attrib ) { case DateTimeAttrib.Access: PathInternal.DllImport.SetFileTime( fs.SafeFileHandle, (PathInternal.DllImport.FILETIME*)0, &fileTime, (PathInternal.DllImport.FILETIME*)0 ); break; case DateTimeAttrib.Creation: PathInternal.DllImport.SetFileTime( fs.SafeFileHandle, &fileTime, (PathInternal.DllImport.FILETIME*)0, (PathInternal.DllImport.FILETIME*)0 ); break; case DateTimeAttrib.Write: PathInternal.DllImport.SetFileTime( fs.SafeFileHandle, (PathInternal.DllImport.FILETIME*)0, (PathInternal.DllImport.FILETIME*)0, &fileTime ); break; default: throw new Exception( "Unknown DateTimeAttrib in File.SetDateTime() function" ); } fs.Close(); }
private static DateTime GetDateTime( string path, DateTimeAttrib attrib, bool utc ) { PathInternal.DllImport.WIN32_FILE_ATTRIBUTE_DATA fileData = new PathInternal.DllImport.WIN32_FILE_ATTRIBUTE_DATA(); if ( PathInternal.DllImport.GetFileAttributesExW( PathInternal.ConvertToUnicodePath( path ), 0, ref fileData ) ) { switch ( attrib ) { case DateTimeAttrib.Write: return PathInternal.FILETIMEToDateTime( fileData.ftLastWriteTime, utc ); case DateTimeAttrib.Access: return PathInternal.FILETIMEToDateTime( fileData.ftLastAccessTime, utc ); case DateTimeAttrib.Creation: return PathInternal.FILETIMEToDateTime( fileData.ftCreationTime, utc ); default: throw new Exception( "Unknown DateTimeAttrib in File.GetDateTime() function" ); } } else throw new IO.FileNotFoundException( path ); }