gpt4 book ai didi

c# - 如何确定是否由于共享冲突而抛出 IOException?

转载 作者:太空狗 更新时间:2023-10-29 18:21:26 24 4
gpt4 key购买 nike

我有一个 C# 应用程序,我想将一个文件复制到一个新位置。有时我需要覆盖现有文件。发生这种情况时,我会收到 System.IO.IOException。我想从共享冲突中恢复,但如何确定返回 IOException 是因为目标文件正在使用而不是其他原因?我可以查找“该进程无法访问该文件,因为它正被另一个进程使用。”消息...但我不喜欢这个主意。

最佳答案

这就是我想出的解决方案。

private void RobustMoveFile( System.IO.DirectoryInfo destinationDirectory, System.IO.FileInfo sourceFile, Boolean retryMove )
{
try
{
string DestinationFile = Path.Combine( destinationDirectory.FullName, sourceFile.Name );
if ( File.Exists( DestinationFile ) )
sourceFile.Replace( DestinationFile, DestinationFile + "Back", true );
else
{
sourceFile.CopyTo( DestinationFile, true );
sourceFile.Delete();
}
}
catch ( System.IO.IOException IOEx )
{
int HResult = System.Runtime.InteropServices.Marshal.GetHRForException( IOEx );
const int SharingViolation = 32;
if ( ( HResult & 0xFFFF ) == SharingViolation && retryMove )
RobustMoveFile( destinationDirectory, sourceFile, false );
throw;
}
}

关于c# - 如何确定是否由于共享冲突而抛出 IOException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425956/

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