Какой процесс блокирует каталог при попытке изменить дату и время 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 работал все время, это была проблема зацикливания дальше по строке кода, она не работала, когда пользователь щелкал мышью по папке (что я делал случайно случайно), но плохой внешний цикл сохранялся это - плохое окончательно навсегда вызывающее исключение счетчика цикла с ошибочным сообщением "файл заблокирован".

0 ответов

Другие вопросы по тегам