Какой процесс блокирует каталог при попытке изменить дату и время LastWrite?
Я пишу в строго управляемом асинхронном (единственном) потоке. это очередь FIFO в потоке и something
блокирует мою попытку сделать Directory.SetLastWriteTime
, Это почти наверняка я. но я не вижу этого Я использовал эту ссылку: и как ее часть я пытался использовать Handle
но C# не поймет ссылку на handle.exe
(не удалось на линии tool.Start();
), несмотря на то, что путь к handle.exe находится в системном пути и работает нормально в команде.
Проблема в том, что я попытался использовать FileUtil
Пример кода ниже в списке ответов, но это работает только на files
Мне нужно посмотреть, что блокирует folder
, имейте в виду, что эта папка на самом деле не заблокирована, я могу изменить LastModifiedDate
в Attribute Changer 7
так что это, конечно, моя очередь, что это неправильно.
это код, который я на самом деле пытаюсь запустить, который постоянно говорит, что он заблокирован.
System.DateTime newDateTime = new DateTime(2011,1,1,0,0,0,0,System.DateTimeKind.Utc);
if (Directory.Exists(parent))
{
Unlocker.unlock(parent); //<--new line
Directory.SetLastWriteTime(parent, newDateTime);
}
обратите внимание, что я подозреваю FileUtil
отлично работает для файлов, но мне нужно изменить folder
и это плохо бомбят. Может кто-нибудь помочь мне получить процесс, блокирующий данный каталог, а не только файл?
РЕДАКТИРОВАТЬ (см. Также, <<- new line
выше) я отказался FileUtil
но я сейчас использую handle.exe
успешно (т. е. если я вручную заблокирую его, пытаясь выделить его в проводнике Windows, например, если он его обнаружит), но handle не возвращает никаких "блокировок", когда бомбы C#:
public static class Unlocker
{
public static void unlock(string fileName)
{
Process tool = new Process();
tool.StartInfo.FileName = @"C:\Program Files (x86)\Handle\handle.exe";
tool.StartInfo.Arguments = fileName + " /accepteula";
tool.StartInfo.UseShellExecute = false;
tool.StartInfo.RedirectStandardOutput = true;
tool.Start();
tool.WaitForExit();
string outputTool = tool.StandardOutput.ReadToEnd();
string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
foreach (Match match in Regex.Matches(outputTool, matchPattern))
{
Debug.WriteLine("Unlocker.unlock(`" + fileName + "`) is locked by `" + Process.GetProcessById(int.Parse(match.Value)).ProcessName + "`");
}
}
}
ВТОРОЕ РЕДАКТИРОВАНИЕ SetWriteTime работал все время, это была проблема зацикливания дальше по строке кода, она не работала, когда пользователь щелкал мышью по папке (что я делал случайно случайно), но плохой внешний цикл сохранялся это - плохое окончательно навсегда вызывающее исключение счетчика цикла с ошибочным сообщением "файл заблокирован".