Guest User

Untitled

a guest
Jun 18th, 2015
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.31 KB | None | 0 0
  1. import struct
  2. import os
  3.  
  4. f = open('byond.rsc', 'rb')
  5. files = []
  6. sizes_files = dict()
  7.  
  8. f.seek(0, 2)
  9. rsc_size = f.tell()
  10. f.seek(0)
  11.  
  12. while f.tell() < rsc_size:
  13.     block_size, stopflag = struct.unpack('Icxxxxxxxxxxxxx', f.read(18))
  14.     file_size = struct.unpack('I', f.read(4))[0]
  15.  
  16.     if stopflag == '\b00':
  17.         f.read(block_size - 17)
  18.         print('! TMP Flag')
  19.  
  20.     filename = b''
  21.     nms = b''
  22.     while nms != b'\x00':
  23.         filename += nms
  24.         nms = f.read(1)
  25.     filename = filename.decode('ascii')
  26.  
  27.     if (not len(filename)) or filename[0] == '.':
  28.         f.read(file_size)
  29.         print('! File Name 0')
  30.         continue
  31.  
  32.     if file_size == 0:
  33.         print('! File Size 0')
  34.         continue
  35.  
  36.     f.read(file_size)
  37.     print(filename, file_size)
  38.     files.append(filename)
  39.  
  40.     if not file_size in sizes_files:
  41.         sizes_files[file_size] = [filename, ]
  42.     else:
  43.         sizes_files[file_size].append(filename)
  44.  
  45.  
  46. for rawfile in os.listdir('res_raw'):
  47.     filesize = os.path.getsize('res_raw/' + rawfile)
  48.     if filesize in sizes_files and len(sizes_files[filesize]) == 1:
  49.         if sizes_files[filesize][0] in files:
  50.             files.remove(sizes_files[filesize][0])
  51.         newfile = 'res_named/' + sizes_files[filesize][0]
  52.  
  53.         newpath = os.path.dirname(newfile)
  54.  
  55.         if not os.path.exists(newpath):
  56.             os.makedirs(newpath)
  57.         with open('res_raw/' + rawfile, 'rb') as oldfile:
  58.             with open(newfile, 'wb') as writefile:
  59.                 writefile.write(oldfile.read())
  60.     elif filesize in sizes_files and len(sizes_files[filesize]) > 1:
  61.         print('Conflict:', rawfile, filesize, sizes_files[filesize])
  62.         num = int(input('Enter number:'))
  63.         if num == -1:
  64.             continue
  65.         if sizes_files[filesize][num] in files:
  66.             files.remove(sizes_files[filesize][num])
  67.         newfile = sizes_files[filesize][num]
  68.         sizes_files[filesize].remove(newfile)
  69.  
  70.         newfile = 'res_named/' + newfile
  71.         newpath = os.path.dirname(newfile)
  72.  
  73.         if not os.path.exists(newpath):
  74.             os.makedirs(newpath)
  75.         with open('res_raw/' + rawfile, 'rb') as oldfile:
  76.             with open(newfile, 'wb') as writefile:
  77.                 writefile.write(oldfile.read())
  78.  
  79. print(files)
  80. print(len(files))
Advertisement
Add Comment
Please, Sign In to add comment