def show_files_in_dir(__, index_dir): __.Status_bar.showMessage("Actualistion des fichiers du dossier") __.Struct.List_fichier.clear() fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) while ind_dossier <= index_dir: if ind_dossier == index_dir: __.Struct.Fichier.setText("Fichiers : " + str(nbr_fichiers)) for j in range(nbr_fichiers): __.Struct.List_fichier.addItem(fichier.readline()[:-1]) fichier.readline() if not fichier.readline(): ind_dossier = index_dir + 1 else: for j in range(nbr_fichiers * 3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if index_dir: __.Status_progress.setValue(50 + ind_dossier / index_dir * 50) else: __.Status_progress.setValue(100) if not nbr_fichiers: break fichier.close() __.Status_bar.showMessage("Actualisation terminée")
def slot_add_fichier(__): liste = qt.QFileDialog.getOpenFileNames(__, "Ajouter des fichiers à l'archive") if __.Tabs.currentIndex() == 0: for path in liste: __.Struct2.List_fichier.addItem(path) __.Struct2.Fichier.setText("Fichiers : " + str(__.Struct2.List_fichier.count())) elif liste: _type = file(__.archive, "rb").read(1) if _type == "0": for nom in liste[ : -1]: add_file_in_file(__.archive, nom, False) add_file_in_file(__.archive, liste[-1]) __.show_files() elif _type == "1": index_dir = __.arborescence[0][__.index_dir[0]][__.index_dir[1]][1] fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) read = None while ind_dossier <=index_dir: if ind_dossier == index_dir: fichier.readline() read = base_int(fichier.readline()[ : -1], 254) break else: for j in range(nbr_fichiers*3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if not nbr_fichiers: break fichier.close() add_files_in_dir(__.archive, liste, read) __.show_files_in_dir(index_dir)
def get_arborescence(fusioned,start=-1,stop=-1,current=0): dirs = [] if start != stop : start, stop = void_read(fusioned,start-current,stop) start += current else:fusioned.read(1) len_nbr = base_int(fusioned.read(1)) nbr_dir = base_int(fusioned.read(len_nbr)) for i in range(nbr_dir) : dirs.append(fusioned.readline()[:-1]+"/") for i,f in enumerate(dirs): if i: index = f[:len_nbr] dirs[i] = index.replace(index,dirs[base_int(index)])+f[len_nbr:] return dirs, nbr_dir, len_nbr
def add_files_in_dir(nom_fuz, noms, start_dir, printer=0): #start_dir numero de ligne ou commence le dossier fusioned = file(nom_fuz, "rb") copy = file(get_path(nom_fuz) + "copy", "wb") ligne = 0 if printer: print "copie du debut du fichier de fusion" for i in range(start_dir - 3): copy.write(fusioned.readline()) string = fusioned.readline()[:-1] copy.write( int_len(int_base(base_int(string, 254) + len(noms), 254), len(string)) + "\n") for nom in noms: if printer: print nom, "\ncalcule de la taille du fichier" ligne = 0 for i in file(nom, "rb").read_lines(): ligne += 1 copy.write(get_name(nom) + "\n" + int_base(ligne, 254) + "\n") if printer: print "copie du fichier" for i in file(nom, "rb").read_lines(): copy.write(i) copy.write("\n") if printer: print "copie de la fin du fichier de fusion" for i in fusioned.read_lines(): copy.write(i) copy.close() remove(nom_fuz) rename(get_path(nom_fuz) + "copy", nom_fuz) if printer: print "creation de l'index du fichier de fusion" create_index_dir(nom_fuz)
def voir_files(fichier,start=-1,stop=-1,current=0): fusioned = file(fichier,"rb") if start != stop : start, stop = void_read(fusioned,start-current,stop) start += current else:fusioned.read(1) string = fusioned.readline() files = [] ligne = 0 read = -1 while string != "": if read == -1: if string == "\n": string = fusioned.readline() files[-1] = ligne ligne += 1 if string == "": break else: name = string[:-1] if files != [] : files[-1] = ligne yield files files = [name,ligne+2,ligne] elif read == -2: read = base_int(string[:-1],254) string = fusioned.readline() read -= 1 ligne += 1 if start > -1 < stop <= ligne: break fusioned.close()
def get_arborescence(fusioned, start=-1, stop=-1, current=0): dirs = [] if start != stop: start, stop = void_read(fusioned, start - current, stop) start += current else: fusioned.read(1) len_nbr = base_int(fusioned.read(1)) nbr_dir = base_int(fusioned.read(len_nbr)) for i in range(nbr_dir): dirs.append(fusioned.readline()[:-1] + "/") for i, f in enumerate(dirs): if i: index = f[:len_nbr] dirs[i] = index.replace(index, dirs[base_int(index)]) + f[len_nbr:] return dirs, nbr_dir, len_nbr
def slot_extraire_file(__): if __.Struct.List_fichier.currentItem(): __.Status_bar.showMessage("Extraction du fichier en cours") filename = unicode(__.Struct.List_fichier.currentItem().text(), "cp1252") fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) index_dir = __.get_index_dir_init() while ind_dossier <= index_dir: if ind_dossier == index_dir: for j in range(nbr_fichiers): temp = fichier.readline()[:-1] if temp == filename: start = fichier.readline()[:-1] stop = fichier.readline()[:-1] extract_file(__.archive, filename, base_int(start, 254), base_int(stop, 254), unicode(__.Path.text(), "cp1252")) ind_dossier = index_dir + 1 break else: fichier.readline() if not fichier.readline(): ind_dossier = index_dir + 1 else: for j in range(nbr_fichiers*3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if index_dir: __.Status_progress.setValue(50 + ind_dossier / index_dir * 50) else: __.Status_progress.setValue(100) if not nbr_fichiers: break __.Status_bar.showMessage("Extraction du fichier terminée") else: __.Status_bar.showMessage("Aucun fichier sélectionné")
def slot_add_fichier(__): liste = qt.QFileDialog.getOpenFileNames( __, "Ajouter des fichiers à l'archive") if __.Tabs.currentIndex() == 0: for path in liste: __.Struct2.List_fichier.addItem(path) __.Struct2.Fichier.setText("Fichiers : " + str(__.Struct2.List_fichier.count())) elif liste: _type = file(__.archive, "rb").read(1) if _type == "0": for nom in liste[:-1]: add_file_in_file(__.archive, nom, False) add_file_in_file(__.archive, liste[-1]) __.show_files() elif _type == "1": index_dir = __.arborescence[0][__.index_dir[0]][ __.index_dir[1]][1] fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) read = None while ind_dossier <= index_dir: if ind_dossier == index_dir: fichier.readline() read = base_int(fichier.readline()[:-1], 254) break else: for j in range(nbr_fichiers * 3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if not nbr_fichiers: break fichier.close() add_files_in_dir(__.archive, liste, read) __.show_files_in_dir(index_dir)
def defusion_files(fichier, appel=0, new_path=""): path = "/".join(fichier.replace("\\", "/").split("/")[:-1]) if path != "": path += "/" fusioned = file(fichier, "rb") fusioned.read(1) erreur = 0 if new_path: dossier = new_path else: dossier = try_name(".".join( fichier.replace("\\", "/").split(".")[:-1])) print dossier try: mkdir(dossier) except: pass if erreur <= 100: string = fusioned.readline() read = -1 while string != "": if read == -1: if string == "\n": fichier = file(name, "ab") fichier.write("\n") fichier.close() string = fusioned.readline() if string == "": break else: name = try_file(dossier + "/" + string[:-1]) print "\t", name fichier = file(name, "wb") elif read == -2: read = base_int(string[:-1], 254) elif read: fichier.write(string) else: fichier.write(string[:-1]) fichier.close() string = fusioned.readline() read -= 1 fusioned.close() else: dossier = None return dossier
def show_files_in_dir(__, index_dir): __.Status_bar.showMessage("Actualistion des fichiers du dossier") __.Struct.List_fichier.clear() fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) while ind_dossier <=index_dir: if ind_dossier == index_dir: __.Struct.Fichier.setText("Fichiers : " + str(nbr_fichiers)) for j in range(nbr_fichiers): __.Struct.List_fichier.addItem(fichier.readline()[:-1]) fichier.readline() if not fichier.readline(): ind_dossier = index_dir + 1 else: for j in range(nbr_fichiers*3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if index_dir: __.Status_progress.setValue(50 + ind_dossier / index_dir * 50) else: __.Status_progress.setValue(100) if not nbr_fichiers: break fichier.close() __.Status_bar.showMessage("Actualisation terminée")
def defusion_files(fichier, appel=0, new_path=""): path = "/".join(fichier.replace("\\","/").split("/")[:-1]) if path != "": path += "/" fusioned = file(fichier,"rb") fusioned.read(1) erreur = 0 if new_path: dossier = new_path else: dossier = try_name(".".join(fichier.replace("\\","/").split(".")[:-1])) print dossier try: mkdir(dossier) except: pass if erreur <= 100: string = fusioned.readline() read = -1 while string != "": if read == -1: if string == "\n": fichier = file(name,"ab") fichier.write("\n") fichier.close() string = fusioned.readline() if string == "" : break else: name = try_file(dossier+"/"+string[:-1]) print "\t",name fichier = file(name,"wb") elif read == -2: read = base_int(string[:-1], 254) elif read : fichier.write(string) else: fichier.write(string[:-1]) fichier.close() string = fusioned.readline() read -= 1 fusioned.close() else: dossier = None return dossier
def voir_files(fichier, start=-1, stop=-1, current=0): fusioned = file(fichier, "rb") if start != stop: start, stop = void_read(fusioned, start - current, stop) start += current else: fusioned.read(1) string = fusioned.readline() files = [] ligne = 0 read = -1 while string != "": if read == -1: if string == "\n": string = fusioned.readline() files[-1] = ligne ligne += 1 if string == "": break else: name = string[:-1] if files != []: files[-1] = ligne yield files files = [name, ligne + 2, ligne] elif read == -2: read = base_int(string[:-1], 254) string = fusioned.readline() read -= 1 ligne += 1 if start > -1 < stop <= ligne: break fusioned.close()
def add_files_in_dir(nom_fuz, noms, start_dir, printer=0): #start_dir numero de ligne ou commence le dossier fusioned = file(nom_fuz, "rb") copy = file(get_path(nom_fuz)+"copy", "wb") ligne = 0 if printer: print "copie du debut du fichier de fusion" for i in range(start_dir-3): copy.write(fusioned.readline()) string = fusioned.readline()[:-1] copy.write(int_len(int_base(base_int(string, 254) + len(noms), 254), len(string))+"\n") for nom in noms: if printer: print nom,"\ncalcule de la taille du fichier" ligne = 0 for i in file(nom, "rb").read_lines(): ligne += 1 copy.write(get_name(nom)+"\n"+int_base(ligne,254)+"\n") if printer: print "copie du fichier" for i in file(nom, "rb").read_lines(): copy.write(i) copy.write("\n") if printer: print "copie de la fin du fichier de fusion" for i in fusioned.read_lines(): copy.write(i) copy.close() remove(nom_fuz) rename(get_path(nom_fuz)+"copy", nom_fuz) if printer: print "creation de l'index du fichier de fusion" create_index_dir(nom_fuz)
def slot_extraire_file(__): if __.Struct.List_fichier.currentItem(): __.Status_bar.showMessage("Extraction du fichier en cours") filename = unicode(__.Struct.List_fichier.currentItem().text(), "cp1252") fichier = file(__.archive_ind, "rb") fichier.readline() ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) index_dir = __.get_index_dir_init() while ind_dossier <= index_dir: if ind_dossier == index_dir: for j in range(nbr_fichiers): temp = fichier.readline()[:-1] if temp == filename: start = fichier.readline()[:-1] stop = fichier.readline()[:-1] extract_file(__.archive, filename, base_int(start, 254), base_int(stop, 254), unicode(__.Path.text(), "cp1252")) ind_dossier = index_dir + 1 break else: fichier.readline() if not fichier.readline(): ind_dossier = index_dir + 1 else: for j in range(nbr_fichiers * 3): if not fichier.readline(): ind_dossier = index_dir + 1 ind_dossier = base_int(fichier.read(__.arborescence[1])) nbr_fichiers = base_int(fichier.readline()[:-1]) if index_dir: __.Status_progress.setValue(50 + ind_dossier / index_dir * 50) else: __.Status_progress.setValue(100) if not nbr_fichiers: break __.Status_bar.showMessage("Extraction du fichier terminée") else: __.Status_bar.showMessage("Aucun fichier sélectionné")
def defusion_dir(fusioned, new_path=""): if new_path: if is_file(new_path): path = try_name(new_path) else: path = new_path[:] try: mkdir(path) except: pass else: path = "/".join(fusioned.replace("\\", "/").split("/")[:-1]) if path[-1] != "/": path += "/" len_path = len(path) fusioned = file(fusioned, "rb") fusioned.read(1) dirs = [] len_nbr = base_int(fusioned.read(1)) nbr_dir = base_int(fusioned.read(len_nbr)) for i in range(nbr_dir): dirs.append(fusioned.readline()[:-1] + "/") for i, f in enumerate(dirs): if i: index = f[:len_nbr] dirs[i] = force_encode(dirs[base_int(index)]) + force_encode( f[len_nbr:]) erreur = 0 temp = try_name(path + decode(dirs[i][:-1])) mkdir(temp) dirs[i] = temp[len_path:] + "/" if erreur > 100: break string = fusioned.read(len_nbr) c_dir = dirs[base_int(string)] nbr_file = base_int(fusioned.readline()[:-1]) + 1 if erreur <= 100: while string != "" and nbr_file: print "\n" * 2, "\t", c_dir print string = fusioned.readline() read = -1 while string != "" and nbr_file: if read == -1: if string == "\n": fichier = file(path + c_dir + name, "ab") fichier.write("\n") fichier.close() string = fusioned.readline() if string == "": break else: nbr_file -= 1 if not nbr_file: break name = get_name( try_name(path + c_dir + decode(string[:-1]))) fichier = file(path + c_dir + name, "wb") print "\t" * 2, name elif read == -2: read = base_int(string[:-1], 254) elif read: fichier.write(string) else: fichier.write(string[:-1]) fichier.close() string = fusioned.readline() read -= 1 if len(string) > len_nbr: c_dir = dirs[base_int(string[:len_nbr])] else: string += fusioned.readline() c_dir = dirs[base_int(string[:len_nbr])] nbr_file = base_int(string[len_nbr:-1], 254) + 1 fusioned.close() return path + dirs[0][:-1]
def get_contenu(__, index_dir): liste_contenu = [] fichier = file(__.archive_ind, "rb") fichier.read(1) nbr_c = base_int(fichier.read(1)) fichier.read(1) arborescence = get_arborescence(file(__.archive, "rb")) num_dossier = base_int(fichier.read(nbr_c)) nbr_fichier = base_int(fichier.readline()[:-1], 254) while num_dossier != index_dir: for i in range(nbr_fichier * 3): fichier.readline() num_dossier = base_int(fichier.read(nbr_c)) nbr_fichier = base_int(fichier.readline()[:-1], 254) liste_contenu.append([arborescence[0][num_dossier], []]) liste_fichier = [] for i in range(nbr_fichier): nom = fichier.readline()[:-1] start = base_int(fichier.readline()[:-1], 254) stop = base_int(fichier.readline()[:-1], 254) liste_contenu[-1][1].append([nom, start, stop]) dossier = arborescence[0][base_int( fichier.read(nbr_c))][:-1].split("/") nbr_fichier = base_int(fichier.readline()[:-1], 254) lim = len(liste_contenu[0][0]) path = get_path(__.archive) lim_start = len(path) index_slash = len(liste_contenu[0][0][:-1].split("/")) - 1 name = get_name(liste_contenu[0][0][:-1]) liste_contenu[0][0] = path + name lim_end = lim_start + lim while dossier[index_slash] == name: liste_contenu.append([path + "/".join(dossier[index_slash:]), []]) for i in range(nbr_fichier): nom = fichier.readline()[:-1] start = base_int(fichier.readline()[:-1], 254) stop = base_int(fichier.readline()[:-1], 254) liste_contenu[-1][1].append([nom, start, stop]) dossier = arborescence[0][base_int( fichier.read(nbr_c))][:-1].split("/") if len(dossier) <= index_slash: break nbr_fichier = base_int(fichier.readline()[:-1], 254) return liste_contenu
def defusion_dir(fusioned, new_path=""): if new_path: if is_file(new_path): path = try_name(new_path) else: path = new_path[:] try: mkdir(path) except: pass else: path = "/".join(fusioned.replace("\\","/").split("/")[:-1]) if path[-1] != "/": path += "/" len_path = len(path) fusioned = file(fusioned,"rb") fusioned.read(1) dirs = [] len_nbr = base_int(fusioned.read(1)) nbr_dir = base_int(fusioned.read(len_nbr)) for i in range(nbr_dir) : dirs.append(fusioned.readline()[:-1]+"/") for i,f in enumerate(dirs): if i: index = f[:len_nbr] dirs[i] = force_encode(dirs[base_int(index)])+force_encode(f[len_nbr:]) erreur = 0 temp = try_name(path+decode(dirs[i][:-1])) mkdir(temp) dirs[i] = temp[len_path:]+"/" if erreur > 100:break string = fusioned.read(len_nbr) c_dir = dirs[base_int(string)] nbr_file = base_int(fusioned.readline()[:-1])+1 if erreur <= 100: while string != "" and nbr_file: print "\n"*2,"\t",c_dir print string = fusioned.readline() read = -1 while string != "" and nbr_file: if read == -1: if string == "\n": fichier = file(path+c_dir+name,"ab") fichier.write("\n") fichier.close() string = fusioned.readline() if string == "":break else: nbr_file -= 1 if not nbr_file :break name = get_name(try_name(path+c_dir+decode(string[:-1]))) fichier = file(path+c_dir+name,"wb") print "\t"*2,name elif read == -2 :read = base_int(string[:-1],254) elif read : fichier.write(string) else: fichier.write(string[:-1]) fichier.close() string = fusioned.readline() read -= 1 if len(string) > len_nbr: c_dir = dirs[base_int(string[ : len_nbr])] else: string += fusioned.readline() c_dir = dirs[base_int(string[ : len_nbr])] nbr_file = base_int(string[len_nbr : -1], 254)+1 fusioned.close() return path+dirs[0][:-1]
ligne += 1 if start > -1 < stop <= ligne: break fusioned.close() def voir_dir(name_fusioned,start=-1,stop=-1,printer=0): fusioned = file(name_fusioned,"rb") for el in files_in_dir(fusioned,get_arborescence(fusioned,start,stop),start,stop,printer):yield el def files_in_dir(fusioned,(dirs,nbr_dir,len_nbr),start=-1,stop=-1,printer=0): if -1 < start <= stop: if start > stop : start, stop = stop, start stop -= start else: stop = -1 string = fusioned.read(len_nbr) c_dir = dirs[base_int(string)] if printer : print c_dir nbr_file = base_int(fusioned.readline()[:-1])+1 ligne = 1 + nbr_dir index = 0 while string != "" and nbr_file: string = fusioned.readline() read = -1 ligne += 1 files = [] if printer : print c_dir while string != "" and nbr_file: if read == -1: if string == "\n": files[-1][-1] = ligne if printer : print ligne
def get_contenu(__, index_dir): liste_contenu = [] fichier = file(__.archive_ind, "rb") fichier.read(1) nbr_c = base_int(fichier.read(1)) fichier.read(1) arborescence = get_arborescence(file(__.archive, "rb")) num_dossier = base_int(fichier.read(nbr_c)) nbr_fichier = base_int(fichier.readline()[:-1], 254) while num_dossier != index_dir: for i in range(nbr_fichier * 3): fichier.readline() num_dossier = base_int(fichier.read(nbr_c)) nbr_fichier = base_int(fichier.readline()[:-1], 254) liste_contenu.append([arborescence[0][num_dossier], []]) liste_fichier = [] for i in range(nbr_fichier): nom = fichier.readline()[:-1] start = base_int(fichier.readline()[:-1], 254) stop = base_int(fichier.readline()[:-1], 254) liste_contenu[-1][1].append([nom, start, stop]) dossier = arborescence[0][base_int(fichier.read(nbr_c))][:-1].split("/") nbr_fichier = base_int(fichier.readline()[:-1], 254) lim = len(liste_contenu[0][0]) path = get_path(__.archive) lim_start = len(path) index_slash = len(liste_contenu[0][0][:-1].split("/")) - 1 name = get_name(liste_contenu[0][0][:-1]) liste_contenu[0][0] = path + name lim_end = lim_start + lim while dossier[index_slash] == name: liste_contenu.append([path + "/".join(dossier[index_slash:]), []]) for i in range(nbr_fichier): nom = fichier.readline()[:-1] start = base_int(fichier.readline()[:-1], 254) stop = base_int(fichier.readline()[:-1], 254) liste_contenu[-1][1].append([nom, start, stop]) dossier = arborescence[0][base_int(fichier.read(nbr_c))][:-1].split("/") if len(dossier) <= index_slash: break nbr_fichier = base_int(fichier.readline()[:-1], 254) return liste_contenu
start, stop, printer): yield el def files_in_dir(fusioned, (dirs, nbr_dir, len_nbr), start=-1, stop=-1, printer=0): if -1 < start <= stop: if start > stop: start, stop = stop, start stop -= start else: stop = -1 string = fusioned.read(len_nbr) c_dir = dirs[base_int(string)] if printer: print c_dir nbr_file = base_int(fusioned.readline()[:-1]) + 1 ligne = 1 + nbr_dir index = 0 while string != "" and nbr_file: string = fusioned.readline() read = -1 ligne += 1 files = [] if printer: print c_dir while string != "" and nbr_file: if read == -1: if string == "\n": files[-1][-1] = ligne if printer: print ligne