FileHandle 阻止 File.Move

FileHandle prevents File.Move

提问人:Daniel 提问时间:11/29/2022 最后编辑:Daniel 更新时间:11/29/2022 访问量:96

问:

我试图弄清楚为什么以下代码会阻止覆盖文件流中使用的文件。

这只有在使用剪切和粘贴时才会发生,复制和粘贴工作得很奇怪

var fs = new FileStream(
    File.OpenHandle(
        path,
        mode: FileMode.Open,
        access: FileAccess.Read,
        share: FileShare.Delete | FileShare.ReadWrite
        ), FileAccess.Read);

这是使用剪切和粘贴时显示的错误 enter image description here

此代码片段演示了错误:

这两个文件都存在,也没有其他应用程序使用它们

var path = @"C:\temp\test\test.log";
var pathCopy = @"C:\temp\test.log";

var fs = new FileStream(
    File.OpenHandle(
        path,
        mode: FileMode.Open,
        access: FileAccess.Read,
        share: FileShare.Delete | FileShare.ReadWrite
        ), FileAccess.Read);
    

File.Copy(pathCopy, path,true); //Works
File.Move(pathCopy, path, true); //Does NOT work -> AccessError
C# .NET-6.0 流文件 句柄

评论

0赞 Jodrell 11/29/2022
因为您没有写入权限?
0赞 Daniel 11/29/2022
File.Copy 或 move 不使用创建的 FileStream,这只是为了证明其他应用程序无法使用剪切和粘贴,但可以在文件上复制和粘贴
0赞 Jodrell 11/29/2022
是的,我明白了,您可能应该从问题中删除多余的代码。但是,您是否具有对目标的写入权限,目标是否存在?
1赞 Evk 11/29/2022
@Jodrell 这里没有多余的代码,打开该文件句柄会导致问题(假设两者都存在并且已经存在)。pathpathCopy
0赞 Daniel 11/29/2022
我已经更新了代码以更清楚地了解我的问题(希望如此)。此外,使用不同的标志在行为上还没有产生任何变化

答: 暂无答案