要检测一个文件是否已经在使用最常见的托管方式是在try块中打开文件。如果这个文件已经在使用会抛出一个IOException异常。
Public bool IsFileLocked(string filename)
{
Bool locked =false;
try
{
FileStream
fs=File.Open(filename,FileMode.OpenOrCreate,
FileAccess.ReadWrite,FileShare.None);
Fs.close();
}
Catch(IOException ex)
{
Locked=true;
}
return Locked;
}
检测一个文件是否在使用的另外一种方法是调用CreateFile API.如果这个文件正在使用,返回无效的句柄(handle)。
[DllImport(“kernel32.dll”,CharSet=CharSet.Auto,SetLastError=true)]
Private static extern SafeFileHandle CreateFile(string IpFileName,FileSystemRight
dwDesireAccess, FileShare dwShareMode, IntPtr securityAttrs,
FileMode dwCreationDisposition, FileOptions
dwFlagAndAttributes, IntPtr hTemplateFile);
Const
int ERROR_SHARING_VIOLATION=32;
Private bool IsFileUse(string filename)
{
Bool inUse=false;
SafeFileHandle fileHandle=
CreateFile(filename,FIleSystemRights.Modify, FileShare.Write, IntPtr.Zero, FileMode.OpenOrCreate,
FileOption.None,IntPtr.Zero)
If(fileHandle.IsInvalid)
{
If(Marshal.GetLastWin32Error()==ERROR_SHARING_VIOLATION)
{
inUse=true;
}
}
fileHandle.Close();
return inUse;
}
有关的帖子
该进程无法访问该文件,因为它正被另外一进程使用http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/e99a7cea-43d3-49b1-82bc-5669e0b9d052
如何检查一个txt文件是否已经打开?
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/76d63016-3864-4020-849a-01a82276493d/
如何检测一个文件打开与否?
http://social.msdn.microsoft.com/forums/fr-FR/netfxbcl/thread/a539cbdc-5f42-4f09-9e04-860845aa049d/
如何知道一个文件被另外一个进程锁定(locked)?
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/4e3a6014-4cd7-4d38-ba87-ccf9ce28b3c5/
文件被锁定或者在使用中
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/f225e48c-0321-49a3-9134-53f409dee5d9/
如果您对我们的论坛在线支持服务有任何的意见或建议,请通过
邮件告诉我们。