首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET Directory.Move()与File.Move()

.NET Directory.Move()与File.Move()
EN

Stack Overflow用户
提问于 2015-10-13 14:22:30
回答 2查看 1.2K关注 0票数 3

我们有一个应用程序,该应用程序将文件存储在临时位置,直到用户决定完成他们的事务。对于每个事务,临时目录是唯一的。一旦文件完成,文件就会从临时位置移动到最终位置,这对于每个事务来说也是唯一的。这一切都是没有任何问题的。

我很惊讶,但在搜索Google和其他方面时,我们无法找到通常被认为是最佳实践的任何主题:

  1. 调用System.IO.Directory.Move(src,des)只需一次移动整个目录,或
  2. 调用System.IO.File.Move(src,des)一次移动一个文件。

由于这些决定通常取决于若干因素,我应指出以下条件:

  1. 源目录和目标目录将始终位于同一台计算机上,但发出调用的应用程序将位于同一网络上的另一台计算机上。我相信应用服务器和文件服务器在同一台物理机器上是单独的VM,但我不是肯定的。
  2. 文件的数量可以从1到10个不等,或者更多。我自己不监视生产系统,所以我不确定平均文件数量,也不确定计数的分布情况。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 11:27:27

我认为最大的问题不是速度,而是:移动错误会发生什么?

我将使用LukeH的答案中的信息,而不是在这里重复。

如果目录移动不能移动单个文件,则MoveFile的行为应该是合适的。如果您使用每个文件移动,那么您必须自己以适当的方式处理错误条件。这需要仔细考虑一下。

请注意,MoveFile的文档指定:

请注意,当目标位于不同的卷上时,目录移动时MoveFile函数将失败。

对于您来说,这可能是问题,也可能不是问题,也可能是使用每个文件移动的原因。Directory.Move文档显式地提到了这一点(以及Directory.Move的参考源显式地检查具有相同根的源和目标)。

票数 1
EN

Stack Overflow用户

发布于 2015-10-13 15:36:22

我不确定是否有任何固定的“最佳实践”,除了你应该使用最合适的工具的工作。

由于您正在做的是将整个目录从临时位置/状态移动到永久位置/状态,我建议使用Directory.Move。这意味着您的代码将更明显地反映您的逻辑意图。

如果你更关心这两种方法的技术差异.

在微软版本的.NET中,Directory.MoveFile.Move最终都调用了Win32 MoveFileMoveFileEx函数。您可以通过查看Reference来确认这一点:

  • Directory.Move -> Directory.InternalMove --> Win32Native.MoveFile
  • File.Move -> File.InternalMove --> Win32Native.MoveFile

考虑到这一点,对于每个事务(通过MoveFile )调用一次(通过Directory.Move)似乎要比多次调用它更可取。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33105182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档