(self, block, data)
| 128 | |
| 129 | # Write To File |
| 130 | def write_file(self, block, data): |
| 131 | assert type(block) is int and 1 <= block <= self.__blocks |
| 132 | assert type(data) is str |
| 133 | assert self.is_file(block) |
| 134 | length = len(data) |
| 135 | file_data = self.__disk.read_file(block) |
| 136 | size = ord(file_data[2]) |
| 137 | header = file_data[:size+3] |
| 138 | blocks = file_data[size+3+4:] |
| 139 | file_map = [(ord(blocks[index*2]) << 8) + ord(blocks[index*2+1]) \ |
| 140 | for index in range(len(blocks) / 2)] |
| 141 | if len(data) % self.__size: |
| 142 | blocks = len(data) / self.__size + 1 |
| 143 | else: |
| 144 | blocks = len(data) / self.__size |
| 145 | blocks = [data[index*self.__size:index*self.__size+self.__size] \ |
| 146 | for index in range(blocks)] |
| 147 | while len(file_map) > len(blocks): |
| 148 | self.__disk.close_block(file_map[-1]) |
| 149 | del file_map[-1] |
| 150 | while len(file_map) < len(blocks): |
| 151 | file_map.append(self.__disk.open_block()) |
| 152 | if blocks: |
| 153 | if len(blocks) == 1: |
| 154 | data = blocks[0] |
| 155 | data = data + chr(0) * (self.__size - len(data)) |
| 156 | self.__disk.write_block(file_map[0], data) |
| 157 | else: |
| 158 | self.__disk.write_block(file_map[0], blocks[0]) |
| 159 | index = 1 |
| 160 | while blocks[index] is not blocks[-1]: |
| 161 | self.__disk.write_block(file_map[index], blocks[index]) |
| 162 | index += 1 |
| 163 | data = blocks[-1] |
| 164 | data = data + chr(0) * (self.__size - len(data)) |
| 165 | self.__disk.write_block(file_map[-1], data) |
| 166 | length = chr(length >> 24) + chr((length >> 16) & 0xFF) + \ |
| 167 | chr((length >> 8) & 0xFF) + chr(length & 0xFF) |
| 168 | blocks = ''.join([chr(pointer >> 8) + chr(pointer & 0xFF) \ |
| 169 | for pointer in file_map]) |
| 170 | data = header + length + blocks |
| 171 | self.__disk.write_file(block, data) |
| 172 | return block |
| 173 | |
| 174 | # Get Directory Contents |
| 175 | def list_directory(self, block): |
no test coverage detected