我正在尝试以编程方式删除已损坏的符号链接,并将其替换为具有相同名称的有效目标的链接。但是,当CreateSymbolicLink()执行时,File.Delete()仍然没有实际删除文件(我已经验证文件在File.Delete()执行后仍然存在,没有错误或警告)。
当程序完成执行时,才会实际删除该文件。有没有搞错?这阻止了创建符号链接。任何想法该怎么做?
private static string replaceSymbolicLink(string linkPath, string newTargetPath)
{
Boolean linkIsFile = File.Exists(linkPath);
Boolean linkIsDir = Directory.Exists(linkPath);
// Create a replacement of the same name and link type with the new target
string newTargetPathDOS = getAbsPathFromPath(newTargetPath);
Boolean targetIsFile = File.Exists(newTargetPathDOS);
Boolean targetIsDir = Directory.Exists(newTargetPathDOS);
if (targetIsFile || targetIsDir)
{
if (linkIsFile)
{
File.Delete(linkPath);
Console.WriteLine(File.Exists(linkPath));
}
else
{
Directory.Delete(linkPath);
}
SymbolicLink type;
if (targetIsFile)
{
type = SymbolicLink.File;
}
else
{
type = SymbolicLink.Directory;
}
CreateSymbolicLink(linkPath, newTargetPath, type);
return getGuidFromPath(linkPath);
}
return null;
}
答案 0 :(得分:4)
在Windows上,删除不是立竿见影的。文件被标记为已删除,并且在关闭最后一个句柄时实际上会消失。通常,此机制不可见,因为大多数文件都是以共享权限打开,以防止删除。这会导致删除失败或立即执行。
FileShare.Delete
允许在删除文件(FileStream
)时保持打开状态。如果您以前从未听说过这种情况,这可能是令人惊讶的行为。
所以你可能仍然打开文件或其他一些进程。