in csharp/NativeUtils/FileJanitor.cs [58:108]
public static bool TryDeleteDirectory(string dir)
{
bool isSuccess = false;
using (var lockFile = TryCreateLockFile(dir))
{
if (null == lockFile)
return false;
var files = Directory.EnumerateFiles(dir);
var opened = new List<FileStream>();
foreach (string fname in files)
if (!IsLockFile(fname))
{
var f = TryOpenWriteable(fname);
if (null == f)
goto Fail;
opened.Add(f);
}
isSuccess = true;
Fail:
foreach (var f in opened)
{
f.Dispose();
}
if (isSuccess)
{
foreach (string fname in files)
{
if (!IsLockFile(fname) && !TryDeleteFile(fname))
return false;
}
}
}
if (isSuccess)
{
try
{
Directory.Delete(dir);
return true;
}
catch { }
}
return false;
}