我正在使用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)