我们有一个应用程序,该应用程序将文件存储在临时位置,直到用户决定完成他们的事务。对于每个事务,临时目录是唯一的。一旦文件完成,文件就会从临时位置移动到最终位置,这对于每个事务来说也是唯一的。这一切都是没有任何问题的。
我很惊讶,但在搜索Google和其他方面时,我们无法找到通常被认为是最佳实践的任何主题:
由于这些决定通常取决于若干因素,我应指出以下条件:
发布于 2015-10-14 11:27:27
我认为最大的问题不是速度,而是:移动错误会发生什么?
我将使用LukeH的答案中的信息,而不是在这里重复。
如果目录移动不能移动单个文件,则MoveFile的行为应该是合适的。如果您使用每个文件移动,那么您必须自己以适当的方式处理错误条件。这需要仔细考虑一下。
请注意,MoveFile的文档指定:
请注意,当目标位于不同的卷上时,目录移动时MoveFile函数将失败。
对于您来说,这可能是问题,也可能不是问题,也可能是使用每个文件移动的原因。Directory.Move文档显式地提到了这一点(以及Directory.Move的参考源显式地检查具有相同根的源和目标)。
发布于 2015-10-13 15:36:22
我不确定是否有任何固定的“最佳实践”,除了你应该使用最合适的工具的工作。
由于您正在做的是将整个目录从临时位置/状态移动到永久位置/状态,我建议使用Directory.Move。这意味着您的代码将更明显地反映您的逻辑意图。
如果你更关心这两种方法的技术差异.
在微软版本的.NET中,Directory.Move和File.Move最终都调用了Win32 MoveFile或MoveFileEx函数。您可以通过查看Reference来确认这一点:
Directory.Move -> Directory.InternalMove --> Win32Native.MoveFileFile.Move -> File.InternalMove --> Win32Native.MoveFile考虑到这一点,对于每个事务(通过MoveFile )调用一次(通过Directory.Move)似乎要比多次调用它更可取。
https://stackoverflow.com/questions/33105182
复制相似问题