【发布时间】:2011-08-20 17:21:46
【问题描述】:
我有一个文件夹:
c:\测试
我正在尝试这段代码:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
我得到异常:
文件已经存在
输出目录肯定存在,输入文件在那里。
【问题讨论】:
-
如果输入文件已经在输出目录下,那么该文件已经存在,从而解释异常。您需要表明您希望新文件覆盖原始文件。
-
听起来错误正在告诉你到底出了什么问题。
-
@Josh 否。听起来 Windows 具有非 POSIX 文件系统行为,这使得找出简单的可移植事务文件更新模式/例程变得不可能。
-
@binki POSIX 是无关紧要的(你指的是 atomic 操作吗?),NTFS does 支持真正的事务操作,如回滚和-获取原始文件内容返回。正如其他人回答的那样,Win32 确实 允许使用替换移动。我的 .NET 的 File.Move 不提供该功能。您可以使用 AlphaFS 之类的库获得带有替换的 Move 和事务操作
-
@binki 在任何情况下,行为都是明确定义的在不同的文件系统上,无论论坛讨论说什么。 File.Move 不调用 Ex 或 Transacted 方法的原因是 FAT,不能被忽略,因为它仍然被存储卡使用,不是原子的,不是 行为相同。重命名不是元数据操作,需要实际的数据移动。忘记交易和写时复制。恕我直言,这不是一个好决定