C# 在网络上删除后的孤立文件

C# 在网络上删除后的孤立文件,c#,.net,io,C#,.net,Io,一年多以来,我们一直面临一个尚未解决的问题。我们有一个定制的部署类型工具,基本上可以将文件从临时区域复制到位于两个不同网络共享上的实时生产服务器。Out应用程序在概念上很简单 在复制文件之前,我们首先要做的一件事是查看目标上是否存在该文件,它通常会这样做并重命名该文件。如果文件名为“myfile.dll”,我们将其重命名为“myfile.dll.bak”。我们这样做是为了解决windows中的文件锁定问题。有时,如果重命名文件,即使文件已锁定,您仍然可以复制它。因此,我们所做的基本上是: Fil

一年多以来,我们一直面临一个尚未解决的问题。我们有一个定制的部署类型工具,基本上可以将文件从临时区域复制到位于两个不同网络共享上的实时生产服务器。Out应用程序在概念上很简单

在复制文件之前,我们首先要做的一件事是查看目标上是否存在该文件,它通常会这样做并重命名该文件。如果文件名为“myfile.dll”,我们将其重命名为“myfile.dll.bak”。我们这样做是为了解决windows中的文件锁定问题。有时,如果重命名文件,即使文件已锁定,您仍然可以复制它。因此,我们所做的基本上是:

File.SetAttributes(destFileName, FileAttributes.Normal);
File.Move(destFileName, destFileName + ".bak");
在该过程结束时,我们将删除所有.bak文件:

Directory.GetFiles(msCopyTo, "*.bak").ToList().ForEach(currFile =>
{
    Trace.WriteLine(string.Format("Deleting file {0}, ....", currFile));
    File.SetAttributes(currFile, FileAttributes.Normal);
    //strips off the read only bit if there is one
    File.Delete(currFile);
    Trace.WriteLine(string.Format("Deleted File {0}", currFile));
})
我们每天都在运行这个过程,而且大多数情况下都是有效的。偶尔,虽然不是。尽管如此,该过程不会失败。在.Net看来,.delete是成功的。它将留下一个孤立文件.bak文件。我说的孤儿是什么意思。这个文件绝对没有安全性。即使是拥有该目录完全访问权限的人也不能删除/读取或拥有该文件的所有权。重新启动文件服务器时,文件将消失

我们把这个问题发给了我们的网络管理员,他们几乎放弃了。他们说,人们每天都会重命名/删除文件,他们看到的唯一问题是通过这个过程复制的文件

这会导致查看此目录的进程出现问题,因为它们在尝试读取其中一个孤立文件时会出现拒绝读取错误,并且很难重新启动高度使用的文件服务器来清除这些问题。我们刚刚用server 2012 R2的新副本替换了文件服务器上的硬件,现在仍在进行:

一些硬件信息: 客户:通常赢7 x64 服务器:服务器2012 R2
驱动器已连接到SAN驱动器。您是否能够获得一致的重新安装?我会把它包起来,然后记录在某个地方。因为你现在还不知道。更多错误信息/诊断将有所帮助。否。99.99%的时间工作正常,没有问题。我们每天运行这个过程,有时多次,可能每两个月发生一次。几乎每件事都有尝试/捕获,一旦发生错误,我们会立即向客户公布错误。当这个问题发生时,我们还没有看到进程失败有太多的场景,我假设这是通过网络运行的,是否有任何网络丢失或数据包丢失?我认为我们无法帮助回答这个问题。在本地计算机上运行程序或重写代码