def get_info(self, path, buffer, file_info): if file_info.context: if path in self.files.keys(): buffer[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL win_size = SizeConvert(len(self.files[path])).convert() buffer[0].nFileSizeHigh = win_size[0] buffer[0].nFileSizeLow = win_size[1] buffer[0].nNumberOfLinks = 1 win_index = SizeConvert(2).convert() buffer[0].nFileIndexHigh = win_index[0] buffer[0].nFileIndexLow = win_index[1] elif path == '\\': buffer[0].dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY buffer[0].nFileSizeHigh = 0 buffer[0].nFileSizeLow = 0 buffer[0].nNumberOfLinks = 1 win_index = SizeConvert(1).convert() buffer[0].nFileIndexHigh = win_index[0] buffer[0].nFileIndexLow = win_index[1] dt_converter = DateTimeConvertor(datetime.today()) dc = dt_converter.convert() buffer[0].ftCreationTime = dc buffer[0].ftLastAccessTime = dc buffer[0].ftLastWriteTime = dc buffer[0].dwVolumeSerialNumber = self.serial_number return 0 else: return -ERROR_INVALID_HANDLE
def find_files_with_pattern(self, path, pattern, func, file_info): ''' Find files with a specific pattern path {string}: file/directory path pattern {string}: parttern to find func {function}: function to call with PWIN32_FIND_DATAW file_info {Object}: file/directory information ''' file_info_raw = file_info.raw() new_path = _normalize_path_win_to_DB_lower(path) # Files res = self.db.view('file/byFolder', key=new_path) for doc in res: doc = doc.value if self.name_in_expression(pattern, doc['name'], False): if 'size' in doc: win_size = SizeConvert(doc['size']).convert() else: win_size = SizeConvert(1).convert() lastModification = doc['lastModification'].split(' GMT')[0] dt_converter = DateTimeConvertor(datetime.strptime(lastModification, '%a %b %d %Y %H:%M:%S')) dc = dt_converter.convert() if 'creationDate' in doc: creationDate = doc['creationDate'].split(' GMT')[0] dt_converter_creation = DateTimeConvertor(datetime.strptime(creationDate, '%a %b %d %Y %H:%M:%S')) dc_creation = dt_converter.convert() else: dc_creation = dc if doc['name'].find('~') == -1: info = WIN32_FIND_DATAW( FILE_ATTRIBUTE_NORMAL, dc_creation, dc, dc, win_size[0], win_size[1], 0, 0, doc['name'], '' ) else: info = WIN32_FIND_DATAW( FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_TEMPORARY, dc_creation, dc, dc, win_size[0], win_size[1], 0, 0, doc['name'], '' ) func(PWIN32_FIND_DATAW(info), file_info_raw) # Folders res = self.db.view('folder/byFolder', key=new_path) for doc in res: doc = doc.value if self.name_in_expression(pattern, doc['name'], False): dc = DateTimeConvertor(datetime.today()).convert() win_size = SizeConvert(1).convert() info = WIN32_FIND_DATAW( FILE_ATTRIBUTE_DIRECTORY, dc, dc, dc, win_size[0], win_size[1], 0, 0, doc['name'], '' ) func(PWIN32_FIND_DATAW(info), file_info_raw) return 0
def get_info(self, path, buffer, file_info): ''' Get file or directory information path {string}: directory path buffer {buffer}: buffer to store file/directory information file_info {Object}: directory information ''' path = _normalize_path_win_to_DB_lower(path) res = self.db.view('file/byFullPath', key=path) if len(res) > 0: # File for doc in res: if path.find('~') == -1: # Standard file buffer[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL else: # Temporary file buffer[0].dwFileAttributes = FILE_ATTRIBUTE_HIDDEN if 'size' in doc.value: win_size = SizeConvert(doc.value['size']).convert() else: win_size = SizeConvert(1).convert() buffer[0].nFileSizeHigh = win_size[0] buffer[0].nFileSizeLow = win_size[1] buffer[0].nNumberOfLinks = 1 win_index = SizeConvert(2).convert() buffer[0].nFileIndexHigh = win_index[0] buffer[0].nFileIndexLow = win_index[1] lastModification = doc.value['lastModification'].split(' GMT')[0] dt_converter = DateTimeConvertor(datetime.strptime(lastModification, '%a %b %d %Y %H:%M:%S')) dc = dt_converter.convert() if 'creationDate' in doc.value: creationDate = doc.value['creationDate'].split(' GMT')[0] dt_converter_creation = DateTimeConvertor(datetime.strptime(creationDate, '%a %b %d %Y %H:%M:%S')) buffer[0].ftCreationTime = dt_converter_creation.convert() else: buffer[0].ftCreationTime = dc buffer[0].ftLastAccessTime = dc buffer[0].ftLastWriteTime = dc else: res = self.db.view('folder/byFullPath', key=path) if len(res) > 0 or path is '\\': # Folder buffer[0].dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY buffer[0].nFileSizeHigh = 0 buffer[0].nFileSizeLow = 0 buffer[0].nNumberOfLinks = 1 win_index = SizeConvert(1).convert() buffer[0].nFileIndexHigh = win_index[0] buffer[0].nFileIndexLow = win_index[1] dt_converter = DateTimeConvertor(datetime.today()) dc = dt_converter.convert() buffer[0].ftCreationTime = dc buffer[0].ftLastAccessTime = dc buffer[0].ftLastWriteTime = dc else: # Document doesn't exist return -ERROR_FILE_NOT_FOUND buffer[0].dwVolumeSerialNumber = self.serial_number return 0
def find_files_with_pattern(self, path, pattern, func, file_info): file_info_raw = file_info.raw() if file_info.context: if path == '\\': dc = DateTimeConvertor(datetime.today()).convert() for i in self.files.keys(): if self.name_in_expression(pattern, i, False): win_size = SizeConvert(len(self.files[i])).convert() info = WIN32_FIND_DATAW(FILE_ATTRIBUTE_NORMAL, dc, dc, dc, win_size[0], win_size[1], 0, 0, i[1:], '') func(PWIN32_FIND_DATAW(info), file_info_raw) return 0 else: return -ERROR_INVALID_HANDLE