确定文件是否正在 Windows 上的 Perl 中使用

2023-11-23

我正在编写一些 Perl,它获取 Windows Media Center 上录制的电视节目,并根据某些条件移动/重命名/删除它们。

由于 Perl 运行相当频繁,我想清楚地确定该文件是否正在使用(换句话说,节目正在录制过程中),这样我就可以避免用它做任何事情。

我当前的方法查看文件的状态(使用“stat”)并在 5 秒后再次进行比较,如下所示:

sub file_in_use
{
  my $file = shift;

  my @before = stat($file);
  sleep 5;
  my @after = stat($file);

  return 0 if ($before ~~ $after);
  return 1;
 }

这似乎有效,但我意识到可能有更好、更干净的方法来做到这一点。

你能给些建议么?


如果录制过程锁定文件,您可以尝试以读写模式打开它,看看是否失败ERROR_SHARING_VIOLATION as GetLastError(通过 Perl 访问$^E特殊变量)。

例如:

#! /usr/bin/perl

use warnings;
use strict;

sub usage { "Usage: $0 file ..\n" }

die usage unless @ARGV;

foreach my $path (@ARGV) {
  print "$path: ";

  if (open my $fh, "+<", $path) {
    print "available\n";
    close $fh;
  }
  else {
    print $^E == 0x20 ? "in use by another process\n" : "$!\n";
  }
}

输出示例Dir100526Lt.pdf由 Adob​​e 阅读器打开:


C:\Users\Greg\Downloads>check-lock.pl Dir100526Lt.pdf setup.exe
Dir100526Lt.pdf: in use by another process
setup.exe: available  

请注意,每当您第一次测试某个条件,然后根据该测试的结果采取行动时,您都在创建一个竞争条件。在您的应用程序中,最糟糕的情况似乎是以下不幸的顺序:

  1. 如上所述测试视频的可用性
  2. 答:可用!
  3. 与此同时,录像机启动并锁定视频
  4. 回到您的程序中,您尝试移动视频,但由于共享冲突而失败
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定文件是否正在 Windows 上的 Perl 中使用 的相关文章

  • 为什么安装 Ruby on Rails 会生成错误“数组‘ruby_check_sizeof_voidp’的大小为负数”?

    安装 Ruby on Rails 时 通过gem install rails 您可能会收到以下错误消息 c Ruby193 include ruby 1 9 1 ruby ruby h 109 14 error size of array
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • 更新命令行输出

    我的程序 碰巧是用 Perl 编写的 尽管我不认为这个问题是 Perl 特定的 在程序中的某一点输出状态消息 Progress x yy where x and yy是一个数字 例如 Progress 4 38 我想在打印新的状态消息时 覆
  • 包含带空格的可执行路径的环境变量是否也应包含必要的引号?

    定义环境变量时 对我来说 在 Windows 上 也许有一个更通用的准则 set MY TOOL C DevTools bin mytool exe 如果该工具位于带有空格的路径上 set MY TOOL C Program Files x
  • 手动创建 msix 包,无需 GUI 或 msi 安装程序

    谁能给我提示如何手动定义 msix 包 我的应用程序还没有 msi 包 所以我不能简单地转换它 有没有一种方法可以像配置文件一样创建 我可以手动定义哪些文件需要进入 msix 包 MSIX GUI Creator 也没有给我足够的控制权 非
  • 测试框架允许测试依赖于其他测试

    我想知道是否有一个测试框架允许将测试声明为依赖于其他测试 这意味着如果它们所依赖的测试未通过 则不应运行它们 或者不应突出显示它们的结果 这种设置的目的是在存在许多测试失败的情况下更容易确定根本原因 作为奖励 如果有某种方法可以使用一个测试
  • 如何获取重定向路径的实际路径?

    在 64 位上运行的 32 位进程会得到广义的由于文件重定向 指向重定向路径的路径 致电GetCurrentDirectory 例如 如果进程正在运行 Windows SysWOW64会得到结果 Windows System32 不过 很有
  • 在 Android 中哪里可以找到应用程序数据

    我的目标是将应用程序中的数据保存在文本文件中以供进一步分析 我使用了给出的确切代码here http www mysamplecode com 2012 06 android internal external storage html用于
  • 在 C# 中查看非托管 dll 上的导出表

    我目前正在尝试创建一个 C 应用程序 该应用程序将允许我查看非托管 DLL 中的导出表 我的问题是 一旦我获得了所需的所有指针 我不知道如何循环访问 API 为我提供的信息 这是我现在所拥有的 using System using Syst
  • 从多个进程附加到单个文件的“线程安全”?

    假设我有 X 个进程打开文件 Y 进行追加 每个进程一次只写入一行 带有 n 真正的日志条目 文件 Y 中的每一行是否保证不会错误地交错 更新 本地附加文件系统 问题取决于正在进行什么类型的写入 如果您使用带缓冲的标准 I O 这通常是大多
  • Curl 不被识别为内部或外部命令、可运行程序或批处理文件

    我已经安装了curl并将其设置为environment variable在我的系统中 但是当运行curl命令它给出一个错误 curl is not recognized as an internal or external command
  • selenium-server:意外状态 SERVICE_PAUSED

    尝试在 Windows 10 中将 Selenium Server 安装为服务 使用 nssm 失败 并显示Unexpected status SERVICE PAUSED on nssm start selenium server Sel
  • 在按钮背景上拉伸/收缩时,位图会失去质量

    简介及相关信息 我有一个所有者绘制的静态控件 它应该在渐变背景上有位图 静态控制尺寸不固定 它们是在创建父窗口期间计算的 我从资源文件加载背景颜色为 RGB 255 163 94 的位图 Using TransparentBlt RGB 2
  • 是否有用于 Shell 扩展的单击处理程序

    经过之后MSDN 外壳扩展 http msdn microsoft com en us library ff468984 v VS 85 aspx我不太确定是否可以扩展 Shell Click 或资源管理器的 Click Event 的行为
  • Rspec——需要存根在另一个文件中调用的 File.open

    在我的测试中 我正在初始化一个名为的新类Package带有一些参数 在此类的初始化中 我打开一个在远程机器上可用的文件 但不是本地常见的文件 我想知道如何在测试中对该方法进行存根 我正在使用 rspec 和 mocha 我尝试过类似的东西
  • 更换桌面壁纸/在桌面上绘制

    我想对我的 Windows 桌面进行一些自定义绘图 以便它看起来可以替换桌面背景 壁纸 我的第一次尝试是获得 DCdesktopListView并绘制它 IntPtr desktopDC GetWindowDC desktopListVie
  • 更新到版本 2.1.1.0 Edge(或稳定版)后,Windows 版 Docker 停留在“Kubernetes 正在启动”状态

    我最近在 Windows 10 计算机上将 Docker for Desktop 更新到最新的 Edge 通道版本 2 1 1 0 不幸的是 更新后 Kubernetes 不再工作 因为它始终停留在 Kubernetes 正在启动 到目前为
  • 如何使用 cypress 登录 Salesforce?

    我目前正在使用 cypress 进行一些测试 但是 我必须与 salesforce 进行一些测试 似乎我遇到了以下问题 哎呀 没有可以运行的测试 context Salesforce gt beforeEach gt cy request
  • CMD shell 中的可用空间

    有没有办法在 CMD 中获取磁盘或文件夹的可用磁盘空间量 无需安装一些第三方应用程序 我有一个 CMD 可以将一个大文件复制到给定目录 当然可以使用 复制命令返回错误级别 但我必须等待时间 需要复制文件 例如 然后磁盘已满并且复制操作失败
  • 使用 Perl 循环 JSON [重复]

    这个问题在这里已经有答案了 我是 Perl 的新手 想要循环这个 JSON 数据并将其打印到屏幕上 我怎样才能做到这一点 arr Year 2012 Quarter Q3 DataType Other 3 Environment STEVE

随机推荐

  • Jasmine.js 测试 - 监视 window.open

    JS var link this notificationDiv getElementsByTagName a 0 link addEventListener click function evt evt preventDefault vi
  • 类型“Microsoft.Reporting.WebForms.ReportViewer”存在于两者中

    我有一个 ASP NET 应用程序 它引用版本 9 0 0 0 的 Microsoft ReportViewer WebForms 我更改为引用版本 11 0 0 0 的 Microsoft ReportViewer WebForms 现在
  • 如何设置画布大小?

    我有一个名为 SeatsPanel 的类 我在 onDraw 方法中绘制座位 使用 drawRect onDraw方法使用Canvas作为参数 但是如何设置Canvas的大小呢 我之所以问这个问题是因为这个类在另一个类中被夸大了 我知道画布
  • R:合并同一数据表中的行,连接某些列

    我在 R 中有我的数据表 我想合并具有相同的行customerID 然后连接其他合并列的元素 我想从这里开始 title author customerID 1 title1 author1 1 2 title2 author2 2 3 t
  • 在 Android 中运行单元测试时,意图解析为不同的进程

    我有一个使用两个活动的小型应用程序 这两个活动都继承自 MapActivity 并显示地图 com google android maps 由于 Android 谷歌地图文档说 每个仅支持一个 MapActivity 过程 多个地图活动 同
  • 强制用户在 Java 中填充 varargs 参数的好方法[重复]

    这个问题在这里已经有答案了 我想强制用户在调用构造函数时填写可选参数 public MyClass String params this params params 目前 以下代码有效 new MyClass 我想阻止它 我想到了这一点 p
  • Biopython SeqIO 到 Pandas Dataframe

    我有一个可以轻松解析的 FASTA 文件SeqIO parse 我对提取序列 ID 和序列长度感兴趣 我用这些行来做到这一点 但我觉得它太重了 两次迭代 转换等 from Bio import SeqIO import pandas as
  • 用星号屏蔽Python中的用户输入[重复]

    这个问题在这里已经有答案了 我试图用星号掩盖用户在 IDLE 中输入的内容 这样他们周围的人就看不到他们正在输入 已经输入的内容 我正在使用基本的原始输入来收集他们输入的内容 key raw input Password 用户输入密码后理想
  • QSignalMapper 是如何工作的?

    我在这里发帖后 将信号和槽关联到动态创建的 qcheckbox我需要关联 信号clicked 当我点击一个qCheckBox我的职能cliqueCheckBox QTableWidget monTab int ligne QCheckBox
  • Oracle SQL 中的小于或等于

    updated date 08 Jun 2010 我有一个这样的查询 select from asd whre updated date lt todate 08 Jun 2010 dd MM yy 但我没有得到任何结果 它只有在以下情况下
  • C# 线程和阻塞 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想知道哪种方法是以线程安
  • Openlayers:矢量特征而不是标记

    我想在地图上放置一个符号 例如 到目前为止我已经使用了 OpenLayersOpenLayers Layer Markers 代码如下所示 map new OpenLayers Map map layer new OpenLayers La
  • 如何在颤动中设置下拉弹出窗口的动态高度

    我是颤振开发的新手 我正在使用我的应用程序的下拉按钮 打开下拉菜单时 弹出对话框中的文本被剪切 下面我附上了带有编码的屏幕截图 请指导我解决这个问题 DropdownButtonHideUnderline child new Dropdow
  • 赋值<指向常量数组的指针> = <指向数组的指针>:不兼容的指针

    当我编译这样的东西时 double da 3 2 3 4 double pda 3 da double const cpda 3 pda gcc warning MSVC ok 海湾合作委员会警告我 warning initializati
  • 如何调试Python中的MemoryError?跟踪内存使用情况的工具?

    我有一个 Python 程序 当我向它提供一个大文件时 它会因 MemoryError 而终止 有没有什么工具可以用来找出内存的使用情况 该程序在较小的输入文件上运行良好 该程序显然需要一些可扩展性改进 我只是想弄清楚在哪里 正如一位智者曾
  • 如何确定 MS SQL Server 2005 中表值变量的内部名称

    可以使用以下命令确定临时表的名称 例如 t1 select TableName Name from tempdb sys tables where Object ID object id tempDB dbo t1 如何找到表值变量的名称
  • 去除大量数字(big.Int)

    我正在尝试将两个大数相除 例如 尝试将 50 除以 18 并且我设置了两个 big Int 变量 first MulRange 1 50 second MulRange 1 18 如何划分数字 最好是整数除法 Thanks 我怎样才能划分数
  • 如何在 Objective-C 中的两个类之间进行引用?

    我正在开发一个 iPhone 应用程序 我对 Objective C 以及 class h 和 class m 结构有点陌生 现在 我有两个类 它们都需要具有另一个类型的变量 但这似乎是不可能的 如果在class1 m 或class2 m
  • 列出 javascript 中所有内置函数?

    js 有没有办法列出所有内置函数及其参数列表上的一些信息 我真的找不到任何关于反射来做这类事情的东西 编辑 Math sin之类的函数其实就是我要列出的 实际上都是内置函数 也许是这样的 for var x in window if win
  • 确定文件是否正在 Windows 上的 Perl 中使用

    我正在编写一些 Perl 它获取 Windows Media Center 上录制的电视节目 并根据某些条件移动 重命名 删除它们 由于 Perl 运行相当频繁 我想清楚地确定该文件是否正在使用 换句话说 节目正在录制过程中 这样我就可以避