我的问题与How to rename a folder in c# which is currently opened by windows explorer
相同作者说他的解决方案是使用SHFileOperation(),但它应该是一个痛苦...这也是我的经验。
有趣的是,用户从那时起发布了使用Visual Basic的引用,并且命令Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(...)即使文件夹当前由Windows资源管理器打开也能正常工作。
但是,看起来Visual Basic命令不像C#命令Directory.Move / DirectoryInfo.MoveTo那样是原子的。
如果您尝试使用C#命令移动文件夹,并且文件夹中的某些文件当前已被锁定,那么您将获得异常,C#将不会移动任何内容。就像它是一个原子操作,它会移动一切或什么也不移动。
使用Visual Basic命令,如果文件夹中的某些文件被锁定,您仍然会收到异常,但是,它会移动未锁定的文件并保留其余内容,包括主文件夹。
我需要的是一个可以移动文件夹的命令,即使用户站在Windows资源管理器中的该文件夹中也是如此。如果文件夹中的文件被锁定,则抛出异常而不移动任何内容。
有没有办法让Visual Basic命令成为原子?就像一个stop方法,如果它抛出一个异常,所以它不会移动任何东西?