Windows использует блокировку . Вы не можете удалить файл или папку, которые используются другим процессом. Некоторые блокировки также влияют на другие потоки в том же процессе. Боюсь, вам придется прервать поток мониторинга или перенаправить его в другой каталог, прежде чем вы сможете удалить этот каталог.
Как удалить папку в Python, когда присутствует [Ошибка 32]
4012
sherlock
Я использую Python 2.7. Я хочу удалить папку, которая может быть или не быть пустой. Папка обрабатывается потоком для мониторинга файлов. Я не могу убить поток, но все равно хотел удалить эту папку. Я пробовал с:
os.rmdir(Location) shutil.rmtree(Location) os.unlink(Location)
... но это не сработало. Это показывает эту ошибку:
[Error 32] The process cannot access the file because it is being used by another process: 'c:\\users\\cipher~1\\appdata\\local\\temp\\fis\\a0c433973524de528420bbd56f8ede609e6ea700'
я хочу, чтобы удалить папку a0c433973524de528420bbd56f8ede609e6ea700
или удалить весь путь также будет достаточно.
class myThread (threading.Thread): def __init__(self, threadID, fileName, directory, origin): threading.Thread.__init__(self) self.threadID = threadID self.fileName = fileName self.daemon = True self.dir = directory self.originalFile = origin def run(self): startMonitor(self.fileName, self.dir, self.originalFile) def startMonitor(fileMonitoring,dirPath,originalFile): logging.debug("in startMonitor") hDir = win32file.CreateFile ( dirPath, FILE_LIST_DIRECTORY, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, win32con.FILE_FLAG_BACKUP_SEMANTICS, None ) logging.debug("Wait for new data and call ProcessNewData for each new chunk that's written") readFlags = win32con.FILE_NOTIFY_CHANGE_FILE_NAME | \ win32con.FILE_NOTIFY_CHANGE_DIR_NAME | \ win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES | \ win32con.FILE_NOTIFY_CHANGE_SIZE | \ win32con.FILE_NOTIFY_CHANGE_LAST_WRITE | \ win32con.FILE_NOTIFY_CHANGE_SECURITY # Wait for new data and call ProcessNewData for each new chunk that's written while 1: # Wait for a change to occur results = win32file.ReadDirectoryChangesW ( hDir, 1024, False, readFlags, None ) # For each change, check to see if it's updating the file we're interested in logging.debug("For each change, check to see if it's updating the file we're interested in") for action, file_M in results: full_filename = os.path.join (dirPath, file_M) #print file, ACTIONS.get (action, "Unknown") if len(full_filename) == len(fileMonitoring) and action == 3: #copy to main file if os.path.exists(originalFile): encrypt_file(key,fileMonitoring,originalFile,iv) try: thread1 = myThread(1, FileName, Location,selectedFileName) thread1.start(); startupinfo = None if os.name == 'nt': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW logging.debug("control to file open subprocess") ss=subprocess.Popen(FileName,shell=True) ss.communicate() logging.debug("file open subprocess executed") removeTempFile(FileName) logging.debug("file removed") shutil.rmtree(Location) #to remove folder, I asked question for this ony. sys.exit(0) except Exception as e: print e logging.error(e) logging.debug("exception in encryption Thread") removeTempFile(FileName) sys.exit(e)
1 ответ на вопрос
1
Roland Smith
Пожалуйста, смотрите код
sherlock 10 лет назад
0
Похожие вопросы
-
12
Почему папка / winsxs становится такой большой и ее можно уменьшить?
-
2
Повышенные привилегии для запуска приложений в Windows?
-
14
PDF Viewer в Windows
-
-
7
Какие службы Windows можно безопасно отключить?
-
8
Firefox PDF плагин для просмотра PDF в браузере на Windows
-
1
Windows теряет макет экрана
-
1
Есть ли способ предотвратить установку / обновление, чтобы засорять мой жесткий диск загадочными пап...
-
1
Как я могу получить доступ к принтеру Windows Vista из Ubuntu по сети?
-
6
Просмотр журнала в Windows
-
3
Фоновая проблема Windows с двумя экранами