gpt4 book ai didi

powershell - 如何从锁定状态中释放 (get-item c :\temp\a. log).OpenRead()?

转载 作者:行者123 更新时间:2023-12-02 22:36:36 24 4
gpt4 key购买 nike

我使用 PowerShell 命令 (get-item c:\temp\a.log).OpenRead() 来测试文件发生了什么。

打开文件进行读取后,如果我发出 (get-item c:\temp\a.log).OpenWrite(),它将返回以下错误

Exception calling "OpenWrite" with "0" argument(s): "The process cannot access the file
'C:\temp\a.log' because it is being used by another process."
+ (get-item c:\temp\a.log).OpenWrite()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : IOException

如何释放OpenRead()状态?

最佳答案

只是为了解释为什么当您使用 .OpenRead() 打开文件然后再次使用 .OpenWrite() 时会看到此行为,这是由 < em> sharing (或缺少),而不是 locking .共享规定在当前流仍处于打开状态时允许从同一文件打开的其他流的访问类型。

OpenReadOpenWrite是包装 FileStream constructor 的便捷方法; OpenRead 创建一个只读流,允许读共享,OpenWrite 创建一个只写流, 允许共享。您可能会注意到还有另一种方法,简称为 Open。具有允许您指定 access 的重载(第二个参数)和共享(第三个参数)自己。我们可以将OpenReadOpenWrite翻译成Open,这样...

$read = (get-item c:\temp\a.log).OpenRead()
# The following line throws an exception
$write = (get-item c:\temp\a.log).OpenWrite()

...成为...

$read = (get-item c:\temp\a.log).Open('Open', 'Read', 'Read')           # Same as .OpenRead()
# The following line throws an exception
$write = (get-item c:\temp\a.log).Open('OpenOrCreate', 'Write', 'None') # Same as .OpenWrite()

无论你怎么写,第三行都无法创建只写流,因为 $read 也只允许其他流读取。防止这种冲突的一种方法是在打开第二个流之前关闭第一个流:

$read = (get-item c:\temp\a.log).Open('Open', 'Read', 'Read')           # Same as .OpenRead()
try
{
# Use $read...
}
finally
{
$read.Close()
}

# The following line succeeds
$write = (get-item c:\temp\a.log).Open('OpenOrCreate', 'Write', 'None') # Same as .OpenWrite()
try
{
# Use $write...
}
finally
{
$write.Close()
}

如果您确实需要在同一个文件上同时打开一个只读流和一个只写流,您始终可以将自己的值传递给 Open 以允许这样做:

$read = (get-item c:\temp\a.log).Open('Open', 'Read', 'ReadWrite')
# The following line succeeds
$write = (get-item c:\temp\a.log).Open('OpenOrCreate', 'Write', 'Read')

请注意,共享是双向的:$read 需要在其共享值中包含 Write,以便 $write 可以用Write 访问,并且 $write 需要在其共享值中包含 Read 因为 $read 已经用 Read 权限。

无论如何,最好调用Close()在任何Stream当您用完它时。

关于powershell - 如何从锁定状态中释放 (get-item c :\temp\a. log).OpenRead()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com