.NET目录.Move()与文件.Move()的比较
我们有一个应用程序,它将文件存储在临时位置,直到用户决定完成其事务。每个事务的临时目录都是唯一的。一旦完成,文件将从临时位置移动到最终位置,这对于每个事务也是唯一的。这一切都没有任何问题 我相当惊讶,但在搜索谷歌等网站时,我们找不到任何通常被认为是最佳实践的主题:.NET目录.Move()与文件.Move()的比较,.net,system.io.file,system.io.directory,.net,System.io.file,System.io.directory,我们有一个应用程序,它将文件存储在临时位置,直到用户决定完成其事务。每个事务的临时目录都是唯一的。一旦完成,文件将从临时位置移动到最终位置,这对于每个事务也是唯一的。这一切都没有任何问题 我相当惊讶,但在搜索谷歌等网站时,我们找不到任何通常被认为是最佳实践的主题: 调用System.IO.Directory.Move(src,des)一次移动整个目录,或者 调用System.IO.File.Move(src,des)一次移动一个文件 由于这些决定通常取决于许多因素,我应该注意以下条件: 源目录和
我不确定是否有固定的“最佳实践”,除了你应该使用最适合这份工作的工具 由于您所做的是将整个目录从临时位置/状态移动到永久位置/状态,因此我建议使用
directory.Move
。这意味着您的代码将更明显地反映您的逻辑意图
如果你更关心这两种方法之间的技术差异 在.NET的Microsoft版本中,
Directory.Move
和File.Move
最终都会调用Win32或函数。您可以通过查看参考源来确认这一点:
- -->-->
- -->-->
考虑到这一点,似乎每次调用
MoveFile
一次(通过Directory.Move
)比多次调用(通过File.Move
)更可取。我认为最大的问题不是速度,而是:移动错误会发生什么
我将使用LukeH答案中的信息,而不是在这里重复
目录移动的MoveFile
行为应适用于无法移动单个文件的情况。如果使用逐文件移动,则必须以适当的方式自行处理错误情况。这需要仔细考虑
请注意,MoveFile
的文档规定:
需要注意的一点是,当目标位于不同的卷上时,MoveFile函数将在目录移动时失败
这可能是您的问题,也可能不是使用逐文件移动的原因。
Directory.Move
文档明确提到了这一点(并且Directory.Move
的参考源显式检查源和目标是否具有相同的根)。源和目标是否在同一卷/分区上?是。通用的目录结构是\temp\,和\final\。我想说的是,只需设置一个小的测试环境,并使用directory.Move()
与File.Move()
比较,记录速度。做几次,然后选择更快的。@sab669如果他想移动整个目录,我会使用目录。Move
。只有当出现性能问题时,我才会开始测试哪个更好。很可能会有很大的不同。首先使用最明显的方法。这是一个公平的观点,假设从纯可读性的角度来看,只使用目录更有意义