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); } }
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); }