public void Truncate(long size) { if (Win32NativeFileMethods.FlushFileBuffers(_handle) == false) { throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to sync for " + _filename); } Win32NativeFileMethods.SetFileLength(_handle, size); }
public static unsafe void WriteFileHeader(FileHeader *header, string path) { using (var fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) { var ptr = (byte *)header; int remaining = sizeof(FileHeader); while (remaining > 0) { int read; if (Win32NativeFileMethods.WriteFile(fs.SafeFileHandle, ptr, remaining, out read, null) == false) { throw new Win32Exception(); } ptr += read; remaining -= read; } Win32NativeFileMethods.FlushFileBuffers(fs.SafeFileHandle); } }
public static unsafe void WriteFileHeader(FileHeader *header, VoronPathSetting path) { using (var fs = SafeFileStream.Create(path.FullPath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read, 4096, FileOptions.None)) { var ptr = (byte *)header; int remaining = sizeof(FileHeader); while (remaining > 0) { int written; if (Win32NativeFileMethods.WriteFile(fs.SafeFileHandle, ptr, remaining, out written, null) == false) { throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to write to file " + path); } ptr += written; remaining -= written; } if (Win32NativeFileMethods.FlushFileBuffers(fs.SafeFileHandle) == false) { throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to Flush File Buffers (sync) of file " + path); } } }