首页 > 其他分享 >WPF 制作一个占用文件的测试工具

WPF 制作一个占用文件的测试工具

时间:2022-09-29 08:22:27浏览次数:91  
标签:文件 item Release 占用 var file 测试工具 WPF

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

先给大家看一下效果:

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

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

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

<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

标签:文件,item,Release,占用,var,file,测试工具,WPF
From: https://www.cnblogs.com/lindexi/p/16733239.html

相关文章

  • WPF 修复 ContextMenu 在开启 PerMonitorV2 后所用 DPI 错误
    本文告诉大家如何修复WPF的ContextMenu在开启PerMonitorV2之后,在双屏不同的DPI的设备上,在副屏弹出的ContextMenu使用了主屏的DPI导致缩放错误的问题关于什么......
  • WPF 切换主题使用 luna 复古版本
    本文告诉大家如何在WPF里面使用luna等复古主题今天在lsj说他准备优化WPF的程序集时,准备删除luna等程序集时,找到了一段有趣的注释,发现在WPF里面可以通过一些有......
  • 【WPF 】ItemTemplateSelector模板选择器
    WPF的ItemsControl数据绑定中,有时会遇到绑定的数据源是多种类型,并且需要对不同类型使用不同的模板。这个时候就需要用到 ItemTemplateSelector。ItemTemplateSelector......
  • CPU 占用过高定位分析
    1、top命令查看占用cpu高的进程2、jps或者ps-ef命令查看该进程相关信息3、通过进程编号(pid)查询占用CPU高的线程//ps-mp进程编号-oTHREAD,tid,time......
  • WPF应用图标更改,打包后安装依然显示原来的图标
    前因:更改项目的应用图标重新打包安装,发现桌面快捷方式图标依然没改,将该exe文件发送或者拷贝到桌面还是图标没改;但是,将exe文件拷贝到其它文件夹或者磁盘下,图标显示已经改了;......
  • [WPF] 用CefShap仿制浏览器
    多标签页使用第三方库Dragablz可以很轻易地实现可拖动的标签页,多个标签页通过相同的缓存路径共享会话,两个箭头是切换标签页(仅超出时显示),右上角是窗口按钮。......
  • wpf 使用 Generic Host
    wpf使用GenericHostpublicpartialclassApp:Application{privateIHost_host;publicApp(){_host=newHostBuilder().C......
  • WPF 自定义可拖动标题栏
    要注意,拖拽的地方,需要加背景色,否则DrageMove 将无效MainWindows.xaml<Windowx:Class="Report.MainWindow"xmlns="http://schemas.microsoft.com......
  • node 服务端口占用解决方法
    如果你的前端项目平时启动都好好的,突然有一天启动时报错,提示端口被占用了,可以使用如下方法试试这里不是要说去找哪个端口占用,然后停掉这个进程,因为亲身经历,有时候找不到占......
  • [备忘]端口占用的解决方法(Windows,CentOS,Redhat)
    Windows查看被占用端口对应的PID(比如8080)netstat-aon|findstr8080查看是哪个进程占用的,然后决定要不要释放tasklist|findstr8080释放端口taskkill-pid......