.NET下的原子文件复制

发布于 2024-08-20 20:07:21 字数 277 浏览 8 评论 0原文

我正在构建一个使用 System.IO.File.Copy(...) 函数复制文件的服务器应用程序。我的文件可能相当大,因此,如果机器崩溃,很有可能是在复制过程中发生的。

重新启动服务后,我应该能够拾取复制任务并继续。如何检测复制是否已成功完成或因服务器崩溃而中断?

我当前的计划是将文件复制到临时名称,复制完成后将其重命名为最终名称。这样,文件命名就能够携带崩溃时的状态信息。

您有什么好的/更好的建议吗?

编辑:目标操作系统是 Win2003,因此事务性 NTFS 不可用

I am building a server app that copies files using System.IO.File.Copy(...) function. My files can be rather large, therefore, it has a fair chance that if the machine crashes, it happens during copying.

After restarting the service, I should be able to pick up the copy tasks and continue. How can I detect if a copy has been successfully completed or interrupted by server crash?

My current plan is to copy the files to a temporary name and once copying completed rename it to the final name. This way the file naming is able to carry the state information over the crash.

Do you have any good/better suggestions?

EDIT: Target OS is Win2003, therefore transactional NTFS is not available

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

楠木可依 2024-08-27 20:07:21

其他人建议使用事务性 NTFS,如果您在 Vista 或更高版本上部署,则可以使用该 NTFS。如果您需要支持 XP(或更早版本),那么临时文件然后移动(重命名)是最好的解决方案。

这个类似问题的答案提供了更多信息:
File.Move 的原子性

Other have suggested transactional NTFS which is fine if you're deploying on Vista or later. If you need to support XP (or earlier) then temporary file followed by a move (rename) is the best solution.

The answer to this similar question provides more info:
Atomicity of File.Move

审判长 2024-08-27 20:07:21

较新版本的 Windows 允许您使用事务

Newer versions of Windows allow you to use transactions .

澉约 2024-08-27 20:07:21

请查看Windows Server 2003 中的后台智能传输服务。它提供了作业的机制,即使重启后也可以暂停和恢复作业。

以下是如何在 .NET 中使用它的一些示例:

编写自动更新应用程序使用 .NET 和后台智能传输服务 API

SharpBITS.NET - 包装器比特API

Check out Background Intelligent Transfer Service in Windows Server 2003. It provides the mechanism of jobs, which can be paused and resumed even after restart.

Here are a few samples how to use it with .NET:

Write Auto-Updating Apps with .NET and the Background Intelligent Transfer Service API

SharpBITS.NET - wrapper for BITS API

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文