Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- def mkfile(filename,data):
- """
- Record struct:
- 10 byte - block size
- 4 byte - filename length
- n byte - filename
- 4 byte - file size
- n bytes - data
- """
- mnt = b""
- # base info starts here
- mnt += int.to_bytes(len(filename), 4, 'little') # file name size
- mnt += filename.encode() # file name
- mnt += int.to_bytes(len(data), 4, 'little') # file size
- mnt += data
- mnt = int.to_bytes(len(mnt), 10, 'little')+mnt
- return mnt
- def parse_block(block):
- """
- output is: (file name, file size, data)
- """
- size = int.from_bytes(block[:4], 'little')
- block = block[4:]
- filename = block[:size]
- block = block[size:]
- dlen = int.from_bytes(block[:4], 'little')
- block = block[4:]
- return filename, dlen, block
- def parse_blocks(data):
- blocks = []
- while True:
- bk = data[:10]
- if len(bk) == 0:
- break
- blklen = int.from_bytes(bk,'little')
- blk = data[10:blklen+10] # ahuet blad
- blocks.append(parse_block(blk))
- data = data[10+blklen:]
- return blocks
- def mkheader(fname,compression=False, compressionFn=0, encryption=0, encFn=None):
- """
- Header format:
- 8 bytes - header size
- 4 bytes - file name length
- n bytes - file name
- 1 byte - compression
- 1 byte - encryption
- """
- version = 1
- mnt = b""
- mnt += int.to_bytes(len(fname), 4, 'little')
- mnt += fname.encode()
- mnt += chr(int(compression)).encode()
- mnt += chr(int(encryption)).encode()
- mnt = int.to_bytes(len(mnt), 8, 'little')+mnt
- return mnt
- class Archive:
- def __init__(self,name):
- self.fo = open(name+".ridefs", "ab+")
- self.fo.write(mkheader(name))
- def add_file(self,name,data):
- self.fo.write(mkfile(name,data))
- def cls(self):
- self.fo.close()
- def __del__(self):
- self.cls()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement