如何确定文件或目录是否正在使用?

时间:2019-05-06 15:21:39

标签: powershell powershell-v4.0

我正在研究一个脚本,该脚本监视downloads文件夹中已完成的项目,并在发现该脚本后开始对该项目进行处理。

我当前的检测方法尝试重命名子目录,如果成功,则假定已完成。对于单个文件,它将尝试将文件移动到名为\filename\filename.ext的子目录中,如果成功则假定已完成。这连同已知的临时文件列表。

尽管此方法在确实使用文件/目录时可能是准确的,但对于某些在等待恢复时未锁定文件的浏览器或下载器来说,此方法可能效果不佳。该版本还会检查日期并仅在xx天不理想的情况下进行处理,因为所有下载都会延迟,因此该版本不理想。

有人有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

This post建议您打开一个文件进行写入以查看其是否被锁定:

$file = "\\xxxx\xxxxx\xxxxxxxx\test.log"
try { [IO.File]::OpenWrite($file).close();exit 0 } catch { exit 999}

我没有注意到浏览器将文件解锁,但是我看到他们选择了另一个名称(* .part或* .partial),直到下载完成。可能值得使用逻辑来检查文件扩展名,直到 .part 以外的其他内容:

Push-Location 
do{
  Sleep 1
}while((Get-ChildItem (join-path $env:USERPROFILE 'Downloads\*.part*')).Length -gt 0) 
相关问题