如何验证在Windows命令或PowerShell中是否可以访问文件?

时间:2015-06-23 17:45:56

标签: sql-server windows powershell

我们在sFTP服务器上接收来自客户的XML文件。 然后,SQL Server作业将其选中并将其加载到数据库中。 但是,它经常失败并显示错误,指出文件不可访问。 那是因为它仍然被上传到我们的FTP服务器。

不幸的是,上传完成后,客户无法重命名文件。我们有很多,这不是他们的首要任务。

我想知道是否有办法确定文件是否已经加载。

1 个答案:

答案 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