def getFilesFromBasePath(self, folderList, hiddenFiles): self.list_panel1.list_ctrl.DeleteAllItems() files=self.list_panel1.list_ctrl.data files.clear() ec=insertErrorCollector(self) wx.BeginBusyCursor() wx.Yield() for i in folderList: try: f=os.listdir(i) except: ec.add(2, i) continue for j in f: if j[0]=="." and hiddenFiles==0: # wenn hiddenFile und unerwünscht continue # dann überspringen try: fn=os.path.join(i, j) except: ec.add(2, hlp.forceUTF8(i)+"/"+hlp.forceUTF8(j)) continue if files.isValid(fn)==False: ec.add(2, fn) continue size, sizeAdj, errors=self._getFileSize(fn) if errors!="": ec.add(2, errors) errFlag=True else: errFlag=False sizeAdj+=self.getDirectorySize(j) rc=files.insertFileOrFolder(fn, size, sizeAdj, errFlag) ec.add(rc, fn) wx.Yield() self.fillListCtrl(self.list_panel1.list_ctrl, 1) ec.show() wx.EndBusyCursor() wx.Yield()
def _getFileSize(self, fileOrFolder, errors=""): fileSize=fileSizeAdj=0 if ignore_symlinks_g==True and os.path.islink(fileOrFolder)==True: #print "link:", fileOrFolder#, os.path.getsize(fileOrFolder) pass elif os.path.isfile(fileOrFolder)==True: # ----------------------------------------- # ----------------- Datei ----------------- fileSize=os.path.getsize(fileOrFolder) if fileSize==0: # auch 0-Byte-Dateien... fileSizeAdj+=self.blockSize # ...belegen einen Block else: fileSizeAdj=self.__adjustToBlockSize(fileSize) if self.addblock&1==1: # JolietRR genisoimage -r -J pass if self.addblock&2==2: # UDF(1.02) genisoimage -udf fileSizeAdj+=self.blockSize if self.addblock&4==4: # UDF(2.01) mkudffs if fileSize>1832: # bei Dateien größer als 1832 Byte... fileSizeAdj+=self.blockSize # muss ein zusätzlicher Block reserviert werden elif os.path.isdir(fileOrFolder)==True: # ----------------------------------------- # -------------- Verzeichnis -------------- fileSizeAdj+=self.blockSize if self.addblock&1==1: # JolietRR genisoimage -r -J fileSizeAdj+=self.blockSize if self.addblock&2==2: # UDF(1.02) genisoimage -udf fileSizeAdj+=(2*self.blockSize) try: fileOrFolderList=os.listdir(fileOrFolder) except: errors+="\n\t"+hlp.forceUTF8(fileOrFolder) return("error", "error", errors) dirsize=[0, 0, 0, 0, 0, 0] # 0:FAT32, 1:ISO9660, 2:Joliet(long), 3:Rock Ridge, 4:UDF1.02, 5:UDF2.01 len_fofl=len(fileOrFolderList) for fileOrFolderSub in fileOrFolderList: # Platzbedarf im Directory für Verzeichnis-Inhalt ermitteln try: fullname=os.path.join(fileOrFolder, fileOrFolderSub) except: # der Fehler wird weiter unten an "errors" übergeben continue isdir=os.path.isdir(fullname) dirsize_cur=self.getDirectorySizeV21(fileOrFolderSub, isdir, len_fofl) for i in range(len(dirsize)): dirsize[i]+=dirsize_cur[i] #print "dirsize={0:10} anzFiles={1:5} dir=".format(dirsize, len(fileOrFolderList)), fileOrFolder for i in range(len(dirsize)): if dirsize[i]>self.blockSize: fileSizeAdj+=self.__adjustToBlockSize(dirsize[i]-self.blockSize) if i==5 and self.addblock&4==4: # bei UDF(2.01)... fileSizeAdj+=self.blockSize # nach dem ersten zusätzlichen Block, gleich noch einen weiteren reservieren for fileOrFolderSub in fileOrFolderList: try: fileOrFolderFullPath=os.path.join(fileOrFolder, fileOrFolderSub) except: errors+="\n\t"+hlp.forceUTF8(fileOrFolder)+"/"+hlp.forceUTF8(fileOrFolderSub) continue curSize, curSizeAdj, errors=self._getFileSize(fileOrFolderFullPath, errors) if type(curSize) in (int, long): fileSize+=curSize if type(curSizeAdj) in (int, long): fileSizeAdj+=curSizeAdj else: errors+="\n\t"+hlp.forceUTF8(fileOrFolder) return(fileSize, fileSizeAdj, errors)