public static string ReadStringFromFile(string filePath) { IntPtr hStream = UnsafeNativeApis.CreateFileFromApp(filePath, GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, (uint)File_Attributes.BackupSemantics, IntPtr.Zero); if (hStream.ToInt64() == -1) { return(null); } byte[] buffer = new byte[4096]; int dwBytesRead; string str = null; unsafe { fixed(byte *pBuffer = buffer) { UnsafeNativeApis.ReadFile(hStream, pBuffer, 4096 - 1, &dwBytesRead, IntPtr.Zero); } } using (StreamReader reader = new StreamReader(new MemoryStream(buffer, 0, dwBytesRead), true)) { str = reader.ReadToEnd(); } UnsafeNativeApis.CloseHandle(hStream); return(str); }
public static bool WriteStringToFile(string filePath, string str) { IntPtr hStream = UnsafeNativeApis.CreateFileFromApp(filePath, GENERIC_WRITE, 0, IntPtr.Zero, CREATE_ALWAYS, (uint)File_Attributes.BackupSemantics, IntPtr.Zero); if (hStream.ToInt64() == -1) { return(false); } byte[] buffer = Encoding.UTF8.GetBytes(str); int dwBytesWritten; unsafe { fixed(byte *pBuffer = buffer) { UnsafeNativeApis.WriteFile(hStream, pBuffer, buffer.Length, &dwBytesWritten, IntPtr.Zero); } } UnsafeNativeApis.CloseHandle(hStream); return(true); }