我们有一个应用程序将文件存储在临时位置,直到用户决定完成其事务。临时目录对于每个事务都是唯一的。完成后,文件将从临时位置移动到最终位置,这对于每个事务也是唯一的。这一切都没有任何问题。
我很惊讶,但在搜索Google和SO时,我们无法找到通常被视为最佳做法的任何主题:
由于这些决定通常依赖于许多因素,我应该注意以下条件:
答案 0 :(得分:3)
我不确定是否有任何固定的“最佳做法”,除了你应该使用最合适的工具。
由于你正在做的是将整个目录从其临时位置/状态移动到永久位置/状态,我建议使用Directory.Move
。这意味着您的代码将更明显地反映您的逻辑意图。
如果你更关心这两种方法之间的技术差异......
在Microsoft .NET版本中,Directory.Move
和File.Move
最终都会调用Win32 MoveFile
或MoveFileEx
函数。您可以通过查看参考资料来确认这一点:
Directory.Move
- > Directory.InternalMove
- > Win32Native.MoveFile
File.Move
- > File.InternalMove
- > Win32Native.MoveFile
考虑到这一点,似乎一次(通过MoveFile
)呼叫Directory.Move
通常比每次交易多次调用(通过File.Move
)更可取。
答案 1 :(得分:0)
我认为最大的问题不是速度,而是:移动错误会发生什么?
我将使用LukeH答案中的信息,而不是在此重复。
如果目录移动MoveFile
无法移动单个文件,则该行为应该适合。如果使用每个文件移动,则必须以适当的方式自己处理错误条件。这需要仔细考虑。
请注意MoveFile
的文档指定:
需要注意的是,当目标位于不同的卷上时,MoveFile函数将在目录移动时失败。
对您而言,这可能是也可能不是问题,并且有理由使用每个文件的Move。 Directory.Move
文档明确提到了这一点(并且Directory.Move
的引用源显式检查具有相同根的源和目标)。