public void SetFileSize(SafeFileHandle handle, long count) { var low = (int)(count & 0xffffffff); var high = (int)(count >> 32); WinNative.SetFilePointer(handle, low, out high, WinNative.EMoveMethod.Begin); if (!WinNative.SetEndOfFile(handle)) { throw new Win32Exception(); } FSync(handle); }
public static void SetFileSize(SafeFileHandle handle, long count) { #if !__MonoCS__ && !USE_UNIX_IO var low = (int)(count & 0xffffffff); var high = (int)(count >> 32); WinNative.SetFilePointer(handle, low, out high, WinNative.EMoveMethod.Begin); if (!WinNative.SetEndOfFile(handle)) { throw new Win32Exception(); } #else int r; do { r = Syscall.ftruncate(handle.DangerousGetHandle().ToInt32(), count); } while (UnixMarshal.ShouldRetrySyscall(r)); UnixMarshal.ThrowExceptionForLastErrorIf(r); #endif FSync(handle); }