确保是否成功复制文件

时间:2015-07-01 12:23:30

标签: c#

我有一个文件,我正在复制到某个位置。以下是代码段 -

//Document Status = Pending
var triggerFileWriter = new StringWriter();
triggerFileWriter.WriteLine("Only for test");
System.IO.File.WriteAllText(fullTriggerFilename, triggerFileWriter.ToString());
triggerFileWriter.Dispose();

if (System.IO.File.Exists(fullTriggerFilename))
{
    // Document Status = Processed
}

File.Exists检查是否足以更新文件状态?
我不担心文件是否被复制并且文档状态未更新。由于计时器作业每10分钟运行一次,因此“待处理”项目将在下次运行时自动获取。

文件复制是否有可能被中断 - 这可能导致文件但实际上没有完全复制? 如果发生这种情况,我可以对我的代码进行哪些更改来解决。

谢谢!

3 个答案:

答案 0 :(得分:1)

嗯,唯一可以确定的方法是将整个文件(逐字节)与您尝试编写的文件进行比较。当然,这并不是很便宜 - 无论如何你都可以轻易地覆盖文件。

在NTFS上,基本上删除了未正确“提交”的文件,因此File.Exists很好。使用例如,可能不是这种情况。 FAT-32,或通过网络文件系统保存时。

在这种情况下,文件大小可能有所帮助 - 除非您事先预先分配文件(这对性能来说是一个很好的做法)。即使没有预先分配,文件也可以正确调整大小,但仍然缺少数据。

答案 1 :(得分:0)

您可以在原始文件上使用散列函数,例如SHAMD5并存储它。然后对复制的文件应用相同的哈希函数并比较两个哈希值。它们必须完全相同。

答案 2 :(得分:0)

您正在调用File.WriteAllText方法。这意味着您的工作将完成,否则您将获得例外。因此,您可以通过.NET I / O API获得该文件正确编写的保证。

但是你永远不会保证它存在于某些资源中。因此,您无需致电File.Exists。只是不要依赖于此。一切都会发生。