C# 文件移动和覆盖[重复]

2023-12-07

我正在开发一个多线程应用程序。我的代码中有某处:

File.Delete(sidetapedata);
File.Move(sidetapedata2, sidetapedata); //sidetapedata and sidetapedata2 are two file paths that correspond to sidetapedata.txt and sidetaptdata2.txt in some directory.

第二行有时运行良好,有时会抛出一个错误IOException :

Cannot create a file when that file already exists.

还有一个线程正在访问sidetapedata文件,但该文件仅读取该文件,没有写入操作。我am使用锁来保护竞争条件。不知道为什么会发生这种情况。

UPDATE


不知道为什么会发生这种情况,除非文件系统中触发了某些事件Delete打电话这意味着它不是actually直到呼叫返回后不久才删除。几个选项:

  • 您可以循环(在出错之前使用某种最大循环数),在尝试移动之前检查文件是否存在,如果删除后文件仍然存在,则短暂睡眠
  • 你可以使用File.Copy(sidetapedata, sidetapedata2, true) to copy而不是移动,然后删除源文件。但这会降低效率,假设移动将通过简单的文件系统目录条目更改来处理(而不是真正复制数据)
  • 你可以使用File.Move在目标文件上而不是File.Delete将其移动到一些无害的其他文件名,然后删除它,希望MoveDelete.

I suspect线程在这里无关紧要 - 我建议您编写一个简短但完整的程序来验证这一点,这样您就可以排除它(并轻松测试解决方法)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 文件移动和覆盖[重复] 的相关文章

随机推荐