在C#中,LockFileEx
是一个非托管函数,用于对文件进行锁定。它是System.IO.File
类中的一个方法,用于同步对文件的访问。LockFileEx
提供了更细粒度的文件锁定控制,允许多个进程同时对同一文件进行读写操作。
在C#中,使用LockFileEx
方法对文件进行锁定的示例代码如下:
using System;
using System.IO;
using System.Runtime.InteropServices;
class FileLockExample
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool LockFileEx(IntPtr hFile, uint dwFlags, uint dwReserved, uint nNumberOfBytesToLockLow, uint nNumberOfBytesToLockHigh, ref System.Threading.NativeOverlapped lpOverlapped);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool UnlockFileEx(IntPtr hFile, uint dwReserved, uint nNumberOfBytesToUnlockLow, uint nNumberOfBytesToUnlockHigh, ref System.Threading.NativeOverlapped lpOverlapped);
const uint LOCKFILE_EXCLUSIVE_LOCK = 2;
const uint LOCKFILE_FAIL_IMMEDIATELY = 1;
static void Main()
{
string fileName = "example.txt";
FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
// Lock the first 10 bytes of the file
uint numBytesToLock = 10;
System.Threading.NativeOverlapped overlapped = new System.Threading.NativeOverlapped();
overlapped.OffsetLow = 0;
overlapped.OffsetHigh = 0;
overlapped.EventHandle = IntPtr.Zero;
bool result = LockFileEx(fileStream.SafeFileHandle.DangerousGetHandle(), LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY, 0, numBytesToLock, 0, ref overlapped);
if (result)
{
Console.WriteLine("File locked successfully.");
// Perform file operations here
// Unlock the file
result = UnlockFileEx(fileStream.SafeFileHandle.DangerousGetHandle(), 0, numBytesToLock, 0, ref overlapped);
if (result)
{
Console.WriteLine("File unlocked successfully.");
}
else
{
Console.WriteLine("Error unlocking file: {0}", Marshal.GetLastWin32Error());
}
}
else
{
Console.WriteLine("Error locking file: {0}", Marshal.GetLastWin32Error());
}
fileStream.Close();
}
}
在这个示例中,我们首先使用FileStream
类打开文件,然后调用LockFileEx
方法对文件进行锁定。在完成文件操作后,我们调用UnlockFileEx
方法解除锁定。
需要注意的是,LockFileEx
方法只能在文件打开时使用,并且需要使用FileStream
类的SafeFileHandle
属性获取文件句柄。此外,LockFileEx
方法的调用需要具有管理员权限。
领取专属 10元无门槛券
手把手带您无忧上云