【问题标题】:Open a file that is in use by other program打开其他程序正在使用的文件
【发布时间】:2020-07-22 03:24:19
【问题描述】:

我试图通过插入 bat 文件中的 powershell 代码访问另一个程序创建的日志文件,但它给了我以下错误(西班牙环境):

Excepci¢n al llamar a "OpenRead" con los argumentos "1": "El proceso no puede obtener acceso al archivo 'C:\Users\g\Documents\BAT\GrabI.log' porque est siendo utilizado en otro 过程。

英文:

使用“1”参数调用“OpenRead”的异常:“进程不能 访问文件“C:\Users\g\Documents\BAT\GrabI.log”,因为它是 正在被另一个进程使用。”

powershell代码为:

@PowerShell  ^
    $N = 200; ^
    $fpath = 'Grab%1.log';  ^
    $fs = [System.IO.File]::OpenRead($fpath);  ^
    $fs.Seek(-$N, 'End') ^| Out-Null;  ^
    $mystr = '';  ^
    for ($i = 0; $i -lt $N; $i++)  ^
    {  ^
        $mystr = ($mystr) + ([char[]]($fs.ReadByte()));  ^
    }  ^
    Write-Host $mystr > logtmp%1.log
%End PowerShell%

有没有什么方法可以让我以读取模式访问文件,即使它正在使用中?

【问题讨论】:

  • 您好,也许您可​​以找到解决方案here
  • 如果其他程序将文件作为“独占”打开,则没有。
  • 谢谢,Bill_Stewart,我正在尝试使用 powershell 从日志中捕获最后的 200 个字符,因为当我尝试通过“输入 Grab%1.log|find “writing”” 在 bat文件我只能从日志中读取 4096 第一个字符,但是当日志没有到达它们时,我没有问题。我认为,如果我可以键入文件,则意味着其他程序尚未将文件打开为“独占”。我错了吗?
  • 谢谢,苏打柳。我已阅读您的链接中所说的内容,并尝试了那里的一些建议,但目前我还没有解决我的问题。
  • 命令inuse(资源包)可以帮助你。注意:它需要重新启动。

标签: powershell batch-file


【解决方案1】:

我想我已经找到了解决问题的方法。我没有打开文件,而是使用了 Get-Content 函数。像这样的:

@PowerShell  ^
    $N = 200; ^
    $mystr = Get-Content 'Grab%1.log' ^| Select-Object -last 1;  ^
    Write-Host $mystr.substring($mystr.length-$N,$N) > logtmp%1.log
%End PowerShell%

现在我没有任何问题。

【讨论】:

    【解决方案2】:

    如果文件很大,最好使用参数 -tail 10

    Get-Content $fpath -tail $N
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2018-08-16
      • 2014-06-19
      • 2023-01-28
      相关资源
      最近更新 更多