diff --git a/pylnk3.py b/pylnk3.py index f037c90..a3567a8 100644 --- a/pylnk3.py +++ b/pylnk3.py @@ -586,9 +586,9 @@ def __init__(self, bytes=None): version_offset = read_short(buf) @classmethod - def create_for_path(cls, path): + def create_for_path(cls, path, entry_type): entry = cls() - entry.type = os.path.isdir(path) and TYPE_FOLDER or TYPE_FILE + entry.type = entry_type try: st = os.stat(path) entry.file_size = st.st_size @@ -690,7 +690,7 @@ def bytes(self): return out.getvalue() def __str__(self): - return "" % self.full_name + return f"" class UwpSubBlock: @@ -1803,7 +1803,26 @@ def for_file( elements = [RootEntry(ROOT_MY_COMPUTER), DriveEntry(levels[0])] for level in levels[1:]: - segment = PathSegmentEntry.create_for_path(level) + entry_type = None + # check if entry exists in file system + if os.path.exists(level): + # check if entry is dir + if os.path.isdir(level): + entry_type = TYPE_FOLDER + elif os.path.isfile(level): + entry_type = TYPE_FILE + else: + raise RuntimeError(f"Unknown file system entry type for path: {level}") + else: + # path does not exist (creating from linux or different system) + # set TYPE_FOLDER by default, unless it's the last entry (which is the file) + # not possible to create links to folders + if level == levels[-1]: + entry_type = TYPE_FILE + else: + entry_type = TYPE_FOLDER + + segment = PathSegmentEntry.create_for_path(level, entry_type) elements.append(segment) lnk.shell_item_id_list = LinkTargetIDList() lnk.shell_item_id_list.items = elements