示例#1
0
 public static bool GetFileInformationByHandleEx(
     SafeFileHandle hFile,
     out FILE_BASIC_INFO info
     )
 {
     info = new FILE_BASIC_INFO();
     return(GetFileInformationByHandleEx(hFile, FILE_INFO_BY_HANDLE_CLASS.FileBasicInfo, out info, (uint)Marshal.SizeOf(info)));
 }
示例#2
0
        public static DateTime GetFileChangeTime(string path)
        {
            using (var file = new FileStream(path, FileMode.Open)) {
                var fileInfo = new FILE_BASIC_INFO();
#pragma warning disable 618
                GetFileInformationByHandleEx(file.Handle, 0, out fileInfo, (uint)Marshal.SizeOf(fileInfo));
#pragma warning restore 618
                return(DateTime.FromFileTime(fileInfo.ChangeTime));
            }
        }
示例#3
0
 public void SetBasicInfo(
     UInt32 FileAttributes,
     UInt64 CreationTime,
     UInt64 LastAccessTime,
     UInt64 LastWriteTime)
 {
     if (0 == FileAttributes)
     {
         FileAttributes = (UInt32)System.IO.FileAttributes.Normal;
     }
     if (null != Stream)
     {
         FILE_BASIC_INFO Info = default(FILE_BASIC_INFO);
         if (unchecked ((UInt32)(-1)) != FileAttributes)
         {
             Info.FileAttributes = FileAttributes;
         }
         if (0 != CreationTime)
         {
             Info.CreationTime = CreationTime;
         }
         if (0 != LastAccessTime)
         {
             Info.LastAccessTime = LastAccessTime;
         }
         if (0 != LastWriteTime)
         {
             Info.LastWriteTime = LastWriteTime;
         }
         if (!SetFileInformationByHandle(Stream.SafeFileHandle.DangerousGetHandle(),
                                         0 /*FileBasicInfo*/, ref Info, (UInt32)Marshal.SizeOf(Info)))
         {
             ThrowIoExceptionWithWin32(Marshal.GetLastWin32Error());
         }
     }
     else
     {
         if (unchecked ((UInt32)(-1)) != FileAttributes)
         {
             DirInfo.Attributes = (System.IO.FileAttributes)FileAttributes;
         }
         if (0 != CreationTime)
         {
             DirInfo.CreationTimeUtc = DateTime.FromFileTimeUtc((Int64)CreationTime);
         }
         if (0 != LastAccessTime)
         {
             DirInfo.LastAccessTimeUtc = DateTime.FromFileTimeUtc((Int64)LastAccessTime);
         }
         if (0 != LastWriteTime)
         {
             DirInfo.LastWriteTimeUtc = DateTime.FromFileTimeUtc((Int64)LastWriteTime);
         }
     }
 }
示例#4
0
        public static bool SetFileInformationByHandle(SafeFileHandle hFile, FILE_BASIC_INFO fileInformation)
        {
            var fih = new FileInformation {
                FILE_BASIC_INFO = fileInformation
            };

            return(SetFileInformationByHandle(
                       hFile,
                       FILE_INFO_BY_HANDLE_CLASS.FileBasicInfo,
                       ref fih,
                       Marshal.SizeOf(fileInformation)));
        }
        // Default values indicate "no change".  Use defaults so that we don't force callsites to be aware of the default values
        internal unsafe static bool SetFileTime(
            SafeFileHandle hFile,
            long creationTime   = -1,
            long lastAccessTime = -1,
            long lastWriteTime  = -1,
            long changeTime     = -1,
            uint fileAttributes = 0)
        {
            FILE_BASIC_INFO basicInfo = new FILE_BASIC_INFO()
            {
                CreationTime   = creationTime,
                LastAccessTime = lastAccessTime,
                LastWriteTime  = lastWriteTime,
                ChangeTime     = changeTime,
                FileAttributes = fileAttributes
            };

            return(SetFileInformationByHandle(hFile, FILE_INFO_BY_HANDLE_CLASS.FileBasicInfo, ref basicInfo, (uint)Marshal.SizeOf <FILE_BASIC_INFO>()));
        }
        // Default values indicate "no change".  Use defaults so that we don't force callsites to be aware of the default values
        internal unsafe static bool SetFileTime(
            SafeFileHandle hFile,
            long creationTime = -1,
            long lastAccessTime = -1,
            long lastWriteTime = -1,
            long changeTime = -1,
            uint fileAttributes = 0)
        {
            FILE_BASIC_INFO basicInfo = new FILE_BASIC_INFO()
            {
                CreationTime = creationTime,
                LastAccessTime = lastAccessTime,
                LastWriteTime = lastWriteTime,
                ChangeTime = changeTime,
                FileAttributes = fileAttributes
            };

            return SetFileInformationByHandle(hFile, FILE_INFO_BY_HANDLE_CLASS.FileBasicInfo, ref basicInfo, (uint)Marshal.SizeOf<FILE_BASIC_INFO>());
        }
示例#7
0
        public static void SetFileInformationToFileStream(
            FileStream stream,
            FileAttributes fileAttributes,
            DateTime?creationTime,
            DateTime?lastAccessTime,
            DateTime?lastWriteTime)
        {
            if (0 == fileAttributes)
            {
                fileAttributes = System.IO.FileAttributes.Normal;
            }

            FILE_BASIC_INFO info = default(FILE_BASIC_INFO);

            if (unchecked ((UInt32)(-1)) != (UInt32)fileAttributes)
            {
                info.FileAttributes = (UInt32)fileAttributes;
            }

            if (creationTime.HasValue)
            {
                info.CreationTime = (ulong)creationTime.Value.ToFileTimeUtc();
            }

            if (lastAccessTime.HasValue)
            {
                info.LastAccessTime = (ulong)lastAccessTime.Value.ToFileTimeUtc();
            }

            if (lastWriteTime.HasValue)
            {
                info.LastWriteTime = (ulong)lastWriteTime.Value.ToFileTimeUtc();
            }

            if (!SetFileInformationByHandle(stream.SafeFileHandle.DangerousGetHandle(),
                                            0 /*FileBasicInfo*/, ref info, (UInt32)Marshal.SizeOf(info)))
            {
                throw Marshal.GetExceptionForHR(Marshal.GetLastWin32Error());
            }
        }
示例#8
0
文件: Utils.cs 项目: saconni/layfs
        public static void SetBasicInfoToFileStream(
            FileStream stream,
            UInt32 fileAttributes,
            UInt64 creationTime,
            UInt64 lastAccessTime,
            UInt64 lastWriteTime)
        {
            if (0 == fileAttributes)
            {
                fileAttributes = (UInt32)System.IO.FileAttributes.Normal;
            }

            FILE_BASIC_INFO Info = default(FILE_BASIC_INFO);

            if (unchecked ((UInt32)(-1)) != fileAttributes)
            {
                Info.FileAttributes = fileAttributes;
            }
            if (0 != creationTime)
            {
                Info.CreationTime = creationTime;
            }
            if (0 != lastAccessTime)
            {
                Info.LastAccessTime = lastAccessTime;
            }
            if (0 != lastWriteTime)
            {
                Info.LastWriteTime = lastWriteTime;
            }
            if (!SetFileInformationByHandle(stream.SafeFileHandle.DangerousGetHandle(),
                                            0 /*FileBasicInfo*/, ref Info, (UInt32)Marshal.SizeOf(Info)))
            {
                Utils.ThrowIoExceptionWithWin32(Marshal.GetLastWin32Error());
            }
        }
 internal static extern bool SetFileInformationByHandle(SafeFileHandle hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ref FILE_BASIC_INFO lpFileInformation, uint dwBufferSize);
示例#10
0
 internal static extern bool SetFileInformationByHandle(SafeFileHandle hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ref FILE_BASIC_INFO lpFileInformation, uint dwBufferSize);
示例#11
0
 private static extern Boolean SetFileInformationByHandle(
     IntPtr hFile,
     Int32 FileInformationClass,
     ref FILE_BASIC_INFO lpFileInformation,
     UInt32 dwBufferSize);
示例#12
0
 static extern bool GetFileInformationByHandleEx(IntPtr hFile, int infoClass, out FILE_BASIC_INFO fileInfo, uint dwBufferSize);
示例#13
0
 public static extern bool GetFileInformationByHandleEx(
     SafeFileHandle hFile,
     FILE_INFO_BY_HANDLE_CLASS infoClass,
     out FILE_BASIC_INFO dirInfo,
     uint dwBufferSize);