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

先给大家看一下效果:

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

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

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

<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. 一天涨 23k Star 的开源项目「GitHub 热点速览」

    ​在 GitHub 上做过开源项目的小伙伴,可能都经历过截图自己项目 100 Star.1000 Star 的时刻,但有些时候事情发生的太快来不及截图,因为可能一觉醒来就破万了.这件事看似有些天方夜谭 ...

  2. 记录--elementui源码学习之仿写一个el-button

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇文章记录仿写一个el-button组件细节,从而有助于大家更好理解饿了么ui对应组件具体工作细节.本文是elementui源码学习仿写 ...

  3. Spring Cloud项目搭建版本选择

    1.查看spring cloud的版本 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4 ...

  4. KingbaseES Create Index Concurrently 过程探究

    前言: 我们知道Oracle 可以通过create index online 在线创建索引,而不影响其他会话修改数据,但Oracle 实际在online 创建索引的最后一步,实际还是需要进行锁升级,申 ...

  5. sql分页遍历出现重复数据原因与解决方案

    1. 问题描述 有同时反馈,直接通过如下的sql进行分页查询,分页会出现重复数据,于是乎我专门查了相关了资料,整理了一下. -- 根据sort字段对dbname进行排序,每五百条数据一页 SELECT ...

  6. LeetCode 416. 分割等和子集(bitset优化)

    LeetCode 416. 分割等和子集 1 题目描述 给你一个只包含正整数的非空数组nums.请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 1.1 输入测试 示例 1: 输入 ...

  7. redis的两种持久化方式

    1.为什么redis需要持久化 答:edis是基于内存的,如果Redis服务器挂了,数据就会丢失 2.有几种方式实现redis的持久化 答:有两种,一种是AOF 持久化,另一种是RDB持久化 一. A ...

  8. #矩阵乘法#洛谷 3702 [SDOI2017]序列计数

    题目链接 分析 考虑容斥,用总方案减去全是合数的方案数, 可以发现 \(n\) 很大,\(p\) 很小,直接用矩阵乘法转移即可 代码 #include <cstdio> #include ...

  9. 解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

    数据类型 数据类型是编程中的重要概念.数据类型指定了变量值的大小和类型.Go是静态类型的,这意味着一旦变量类型被定义,它只能存储该类型的数据. 基本数据类型 Go 有三种基本数据类型: bool:表示 ...

  10. C# Log4net详细说明

    1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...