Exemplo n.º 1
0
        public override bool GetFileInfo(string fileName, IntPtr fileHandle, out DateTime lastWriteTime, out long fileLength)
        {
            Win32FileHelper.BY_HANDLE_FILE_INFORMATION fi;

            if (Win32FileHelper.GetFileInformationByHandle(fileHandle, out fi))
            {
                lastWriteTime = DateTime.FromFileTime(fi.ftLastWriteTime);
                fileLength    = fi.nFileSizeLow + (((long)fi.nFileSizeHigh) << 32);
                return(true);
            }
            else
            {
                lastWriteTime = DateTime.MinValue;
                fileLength    = -1;
                return(false);
            }
        }
Exemplo n.º 2
0
        private FileStream WindowsCreateFile(string fileName, bool allowConcurrentWrite)
        {
            int fileShare = Win32FileHelper.FILE_SHARE_READ;

            if (allowConcurrentWrite)
            {
                fileShare |= Win32FileHelper.FILE_SHARE_WRITE;
            }

            if (_createParameters.EnableFileDelete && PlatformDetector.GetCurrentRuntimeOS() != RuntimeOS.Windows)
            {
                fileShare |= Win32FileHelper.FILE_SHARE_DELETE;
            }

            IntPtr hFile = Win32FileHelper.CreateFile(
                fileName,
                Win32FileHelper.FileAccess.GenericWrite,
                fileShare,
                IntPtr.Zero,
                Win32FileHelper.CreationDisposition.OpenAlways,
                _createParameters.FileAttributes, IntPtr.Zero);

            if (hFile.ToInt32() == -1)
            {
                Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
            }

            FileStream returnValue;

#if DOTNET_2_0 || NETCF_2_0
            Microsoft.Win32.SafeHandles.SafeFileHandle safeHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(hFile, true);
            returnValue = new FileStream(safeHandle, FileAccess.Write, _createParameters.BufferSize);
#else
            returnValue = new FileStream(hFile, FileAccess.Write, true, _createParameters.BufferSize);
#endif
            returnValue.Seek(0, SeekOrigin.End);
            return(returnValue);
        }