Python3: файл используется другим процессом - PullRequest
0 голосов
/ 05 июля 2018

Обычно при отправке кода здесь я бы старался включить только минимальный объем кода, чтобы продемонстрировать проблему. Однако я не сталкивался с этой проблемой до самого конца написания кода, что делало практически невозможным устранение проблемы.

У меня есть кусок кода, который преобразует файл между различными типами. Этот код работает без проблем. Он начинается с файла XCI внутри ZIP-файла и преобразует его в папку. Однако в самом конце кода я попытался заставить свой скрипт удалить некоторые временные папки, которые он создал. Это вызывает несколько запутанную ошибку, которую я не смог успешно устранить.

import os, shutil, zipfile
from shutil import copyfile
from time import sleep

for fileName in os.listdir("D:/start"):
    filePath = "D:/start" + fileName 
    os.makedirs("C:/Users/Julian/Documents/conversion/extract")

    copyfile(filePath, "C:/Users/Julian/Documents/conversion/extract/game.zip")

    print("Extracting C:/Users/Julian/Documents/conversion/extract/game.zip")
    zip_ref = zipfile.ZipFile("C:/Users/Julian/Documents/conversion/extract/game.zip", 'r')
    zip_ref.extractall("C:/Users/Julian/Documents/conversion/extract")
    zip_ref.close()

    for file in os.listdir("C:/Users/Julian/Documents/conversion/extract"):
        if file.endswith(".xci"):
            os.rename(os.path.join("C:/Users/Julian/Documents/conversion/extract", file), "C:/Users/Julian/Documents/conversionh/extract/game.xci")

    os.system("C:/Users/Julian/Documents/conversion/hactool/hactool.exe -t xci C:/Users/Julian/Documents/conversion/extract/game.xci --outdir=C:/Users/Julian/Documents/conversionh/extract")

    fileSizeTupleList = []
    largestSize = 0

    os.chdir("C:/Users/Julian/Documents/conversion/conversion/secure")
    for i in os.listdir(os.curdir):
        if os.path.isfile(i):
            fileSizeTupleList.append((i, os.path.getsize(i)))

    for fileName, fileSize in fileSizeTupleList:
        if fileSize > largestSize:
            largestSize = fileSize
            largestFile = fileName

    print("Extracting C:/Users/Julian/Documents/conversion/extract/secure/" + largestFile)

    os.system("C:/Users/Julian/Documents/conversion/hactool/hactool.exe -t nca -k C:/Users/Julian/Documents/conversion/hactool/keys C:/Users/Julian/Documents/conversion/extract/secure/" + largestFile + " --exefsdir=C:/Users/Julian/Documents/conversion/game --romfs=C:/Users/Julian/Documents/conversion/game/RomFS.romfs")
    shutil.copytree("C:/Users/Julian/Documents/conversion/game", "D:/end/" + os.path.split(filePath)[1][:-4])
    shutil.rmtree("C:/Users/Julian/Documents/conversion/extract")
    shutil.rmtree("C:/Users/Julian/Documents/conversion/game")

Этот код работает нормально, пока не достигнет второй до последней строки. В этот момент я вижу следующую ошибку:

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:/Users/Julian/Documents/conversion/extract\\secure'

Я понятия не имею, что является причиной этой ошибки, поэтому любая помощь будет принята.

1 Ответ

0 голосов
/ 05 июля 2018

Вы изменили свой рабочий каталог на каталог, который пытаетесь удалить с помощью этой строки:

os.chdir("C:/Users/Julian/Documents/conversion/conversion/secure")

Таким образом, вы не можете удалить каталог, так как ваш процесс скрипта Python использует его.

Просто измените свой рабочий каталог на корневой каталог (os.chdir('/')) перед удалением "C:/Users/Julian/Documents/conversion/conversion/secure".

...