我们在sFTP服务器上接收来自客户的XML文件。 然后,SQL Server作业将其选中并将其加载到数据库中。 但是,它经常失败并显示错误,指出文件不可访问。 那是因为它仍然被上传到我们的FTP服务器。
不幸的是,上传完成后,客户无法重命名文件。我们有很多,这不是他们的首要任务。
我想知道是否有办法确定文件是否已经加载。
答案 0 :(得分:0)
这是一个简单的函数,基于此问题Powershell: Check if a file is locked中的第二个答案,链接在jradich1234的评论中。
function Is-FileReady {
param ([parameter(Mandatory=$true)][string]$Path)
$File = New-Object System.IO.FileInfo $Path
if ((Test-Path -Path $Path) -eq $false){
# file does not exist
return $false
}
try {
# try to open file for exclusive access - [System.IO.FileShare]::None
$Stream = $File.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
if ($Stream){
$Stream.Close()
# file is ready.
return $true
}
}
catch {
# file is locked.
return $false
}
}
Usage:
Is-FileReady "C:\temp\blah.txt"
True