RequirementPython удаление файлов - «В настоящее время используется другим процессом»
Я должен попытаться создать программу, которая удаляет все поврежденные изображения (и изображения, размер которых меньше, чем 400x400) и отфильтровывает остальные изображения в группы по 10.000.
Проблема
В настоящее время, когда я пытаюсь удалить любое изображение, которое «коррумпированный» он говорит, что файл в данный момент используется другим процессом за ошибки ниже:
Процесс не может получить доступ к файл, потому что он используется другим процессом.
Шаги, предпринятые
Я попытался несколько способов, чтобы установить файл бесплатно, включая с помощью «назад педали» стратегию, когда приложение переходит к следующему изображению затем назад педали, чтобы попытаться удалить, что один, но он все еще остается открытым. Если я попытаюсь удалить изображение вручную, когда Python открыт, он с радостью пройдет.
Пожалуйста, смотрите код ниже:
def confirmIt():
#======== Confirm Selection and Move files to new sub-directory:
if not folderPath.get() == "": ## make sure not blank
source = folderPath.get() ## set source path
size = 0
broken = False
for fname in os.listdir(source):
if fname.lower().endswith(extensions):
imageName = source+"\\"+fname ## set the source location of the image
try:
img = Image.open(imageName)
width, height = img.size ## get the dimensions
size = width * height/1000
broken = False
img.close()
except IOError, e:
broken = True
img.close()
if (broken == True):
def handleRemoveReadonly(func, path, exc):
excvalue = exc[1]
if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO)
func(path)
else:
raise
try:
os.remove(imageName) ## Remove all remaining images that don't match the preset requirements (<400 and is an image)
Extra Info
Пожалуйста, обратите внимание, что я использую графический интерфейс, а поэтому "resultMessage" и аналогичных выходных/входных полей по этой причине.
EDIT:
После назад и вперед обсуждения с @Cyphase я определил, где вопросы были. Предыдущие сообщения были связаны с моим редактированием OP с отслеживанием для него. Я действительно не использую этот форум, поскольку мне обычно не нужно кодировать. Другие темы этого приложения могут возникнуть. Благодарю.
Вы уверены, что некоторые другие процессы не открывают файл? Кроме того, почему вы определяете 'handleRemoveReadonly()' в блоке if, когда вы даже не используете его? – Cyphase
Какой оператор является сообщением об ошибке, 'open',' rmdir' или 'remove'? – cdarke
Обратите внимание, что удаление должно работать под POSIX, даже если другой процесс использует этот файл. Возможно, вам стоит подумать о том, чтобы пометить его любой операционной системой, которую вы используете (я бы предпочел окна). – skyking