我在开发软件进行测试时,需要测试拖入的文件被占用时软件的行为,于是就做了一个文件占用工具,此工具可以将某个文件进行占用,以及获取某个文件被哪个进程占用

先给大家看一下效果:

以上是拖入文件到灰色部分,将会让此文件被占用。点击释放按钮即可释放对此文件的占用

如果拖入的文件已被占用了,将会显示占用文件的进程

此工具的制作十分简单,先看看界面部分,代码如下

<Window x:Class="TakeUpFile.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TakeUpFile"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Background="Gray" AllowDrop="true" Drop="Grid_Drop"> </Grid>
<Grid Grid.Row="1" Margin="10,10,10,10">
<TextBlock x:Name="TracerTextBlock" Margin="10,10,10,10" />
<Button HorizontalAlignment="Right" Margin="10,10,10,10" Click="Button_Click">释放</Button>
</Grid>
</Grid>
</Window>

在 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
{
// 忽略
}
}

本文代码放在 githubgitee 欢迎访问

应用下载地址: https://github.com/lindexi/UWP/releases/download/WordPageToImages_1.0.1/WordPageToImages-net5.0-1.0.1.zip

WPF 制作一个占用文件的测试工具的更多相关文章

  1. 工具推荐:Backdoor-apk,安卓APK文件后门测试工具

    工具推荐:Backdoor-apk,安卓APK文件后门测试工具 Backdoor-apk可以看成是一个shell脚本程序,它简化了在Android APK文件中添加后门的过程.安全研究人员在使用该工具 ...

  2. 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具

    查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...

  3. 转: 用 Go 写一个轻量级的 ldap 测试工具

    前言 这是一个轮子. 作为一个在高校里混的 IT,LDAP 我们其实都蛮熟悉的,因为在高校中使用 LDAP 来做统一认证还蛮普遍的.对于 LDAP 的管理员而言,LDAP 的各种操作自然有产品对应的管 ...

  4. C#-用Winform制作一个简单的密码管理工具

    为什么要做? 首先是为了练习一下c#. 想必大家都有过记不起某个平台的账号密码的经历,那种感受着实令人抓狂.那这么多账号密码根本记不住!我之前用python写过一个超级简单(连账号信息都写在代码里那种 ...

  5. mysqlslap 一个MySQL数据库压力测试工具

    在Xen/KVM虚拟化中,一般来说CPU.内存.网络I/O的虚拟化效率都非常高了,而磁盘I/O虚拟化效率较低,从而磁盘可能会是瓶颈.一般来说,数据库对磁盘I/O要求比较高的应用,可以衡量一下在客户机中 ...

  6. WPF开发的FTP文件上传工具

    前言 最近楼主在改版的项目里有使用到FTP上传文件,所以看到之前的项目里FTP上传的功能,然后抽个时间学习一番,做着做着就作出了这个工具了(虽然有些验证的功能没加上),但是基本的上传功能还是很好用的, ...

  7. 制作一个自己的xhprof测试平台

    1 1.首先安装php开发环境,比如lnmp. 2.安装xhprof ps: 记住从github上面下载(https://github.com/phacility/xhprof), 不要从pecl.p ...

  8. Opencv探索之路(二十):制作一个简易手动图像配准工具

    近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...

  9. 利用HTML制作一个简单的界面(工具HBuilder)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"><!--标题,里面填写 ...

  10. wpf实现一个windows定时关机的工具

    基本界面 起源 在家睡前喜欢用电脑放情景喜剧看,电脑需要定时关机,一开始直接命令行定时关机,感觉有点小麻烦, 于是最近弄了个有界面的 主要功能 在指定的时间之后执行 关机|休眠|重启 的操作, 支持取 ...

随机推荐

  1. 三维模型3DTile格式轻量化压缩模型变形浅析

    三维模型3DTile格式轻量化压缩模型变形浅析 在对三维模型进行轻量化压缩处理的过程中,常常会出现模型变形的现象.这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素.以下将对此现象进行详细分析 ...

  2. 第144篇:阿里低开项目 init方法

    好家伙,  demo-general项目运行后主界面如下   解析阿里低开引擎中的初始化方法init 拆解项目来自阿里的lowcode engine目录下的 demo general项目 0.找到入口 ...

  3. 你是怎么理解ES6中 Generator的?使用场景?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.介绍 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同 回顾下上文提到的解决异步的手段: 回 ...

  4. centos7上单机安装fastdfs6.0.9

    目录 1.背景 2.fastdfs的一些知识 2.1 fastdfs的特点 2.2 架构图 2.2.1 client 介绍 2.2.2 tracker-server 介绍 2.2.3 storage- ...

  5. 从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

    一.引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化 ...

  6. 【Oracle】Oracle表空间数据文件大小设置

    Oracle数据文件默认大小上限是32G,如果要数据文件大于32G,需要在数据库创建之初就设置好. 表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实 ...

  7. oracle job 带参数

    declare job number; begin sys.dbms_job.submit(job => job, what => 'DECLARE S1 VARCHAR2(4000); ...

  8. Oracle 视图创建自增ID

    select ROW_NUMBER() over (order by sysdate()) as id

  9. KingbaseES V8R6 数据库运维案例之 -- root用户securecmd连接'Permission denied'错误

    案例分析: 在KingbaseES V8R6数据库在不支持ssh连接的系统环境,可以通过securecmdd服务建立主机之间的通讯,默认securecmdd服务建立用户之间的互信,通过publicke ...

  10. Scala数值类型转换、算数运算符、关系(比较)运算符和逻辑运算符

    原则 强制类型转换 Java : int num = (int)2.5Scala : var num : Int = 2.7.toInt 数值类型和String类型之间的转换 (1)基本类型转 Str ...