Python: обнаружение каталога, который не может быть обнаружен в Windows 7 - PullRequest
1 голос
/ 01 апреля 2012

Я пытаюсь написать детектор, который проверяет, можно ли удалить определенный каталог с помощью shutil.rmtree.У меня есть готовый неполный код, как показано ниже, который теперь работает частично.

Этот код теперь может выдавать предупреждение, когда все .exe-файлы в целевой папке все еще работают.Но этот код еще не может помечать предупреждения, если какой-либо конкретный файл в папке открывается редактором (что является еще одной причиной, по которой каталог не удаляется).Любое руководство будет оценено.Заранее спасибо

Примечание. Я использовал метод open, чтобы проверить наличие заблокированного файла.

def list_locked_files(dir):

    isLocked = False
    for name in os.listdir(dir):
        uni_name = unicode(name)
        fullname = dir + u'/' + uni_name

        if os.path.isdir(fullname):
            list_locked_files(fullname)
        else:
            try:
                f = open(fullname, 'r+')
                f.close()
            except IOError:
                print fullname + u' is locked!'
                isLocked = True
   if isLocked is True:
        print u'Please close the files/dir above !'
        sys.exit(0)

1 Ответ

2 голосов
/ 01 апреля 2012

Не обязательно определить, удастся ли удалить файл в Windows. Файл может быть открыт в полностью разрешенном режиме общего доступа, что означает, что другая попытка открыть файл будет успешной (независимо от того, какой тип доступа вы запрашиваете).

Единственный способ определить, можно ли удалить файл, это на самом деле попробовать.

Даже если был точный способ заранее сказать, как только вы получите информацию, она мгновенно устареет. Например, после вызова list_locked_files программа может открыть другой файл в этом каталоге, что приведет к сбою rmtree().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...