我在开发软件进行测试时,需要测试拖入的文件被占用时软件的行为,于是就做了一个文件占用工具,此工具可以将某个文件进行占用,以及获取某个文件被哪个进程占用
先给大家看一下效果:
以上是拖入文件到灰色部分,将会让此文件被占用。点击释放按钮即可释放对此文件的占用
如果拖入的文件已被占用了,将会显示占用文件的进程
此工具的制作十分简单,先看看界面部分,代码如下
释放
在 Grid_Drop 里面,将使用 FileStream 打开传入的文件,打开方式的设置不共享,也就是占用文件。如果打开失败,使用 WPF 获取是哪个进程占用了文件 的方法拿到占用文件进程
private void Grid_Drop(object sender, DragEventArgs e)
{
Release();
var fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
if (fileList is not null)
{
var file = fileList.FirstOrDefault();
if (file != null)
{
if (File.Exists(file))
{
try
{
CurrentFileStream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException ioException)
{
if (ioException.HResult == unchecked((int)0x80070020))
{
var processList = FileUtil.WhoIsLocking(file);
if (processList != null)
{
var message = $"文件{file}被程序占用中:";
foreach (var item in processList)
{
message += $"{item.ProcessName}({item.Id});";
}
TracerTextBlock.Text = message;
return;
}
}
}
TracerTextBlock.Text = $"锁定 {file}";
}
}
}
}
上面的 Release 方法是释放占用
private void Release()
{
try
{
CurrentFileStream?.Dispose();
}
catch
{
// 忽略
}
}
Original: https://www.cnblogs.com/lindexi/p/16733239.html
Author: lindexi
Title: WPF 制作一个占用文件的测试工具
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577726/
转载文章受原作者版权保护。转载请注明原作者出处!