Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
 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 );
 }