diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index 2f021ed..bcb9b87 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -2282,38 +2282,41 @@ class MainWindow(QMainWindow): def _generate_alternative_filename(self, original_path: Path, xml_dir: Path) -> Path: """ Generiert alternative Dateinamen im Format: datei_1.xml, datei_2.xml, ... - + Args: original_path: Ursprünglicher Dateipfad xml_dir: Ziel-XML-Verzeichnis - + Returns: Path: Pfad mit alternativem Dateinamen """ try: base_name = original_path.stem # "datei" extension = original_path.suffix # ".xml" - + + # Sammle einmalig alle verwendeten Dateinamen (Performance-Optimierung) + all_xml_files = self._get_all_project_xml_files() + used_names = {xml_file.xml.name for xml_file in all_xml_files} + counter = 1 while True: new_name = f"{base_name}_{counter}{extension}" new_path = xml_dir / new_name - - # Prüfe sowohl physische Existenz als auch Verwendung im Projekt - if not new_path.exists() and not self._is_filename_used_in_project(Path("xml") / new_name): + + # Prüfe sowohl physische Existenz als auch Verwendung im Projekt (optimierter Set-Lookup) + if not new_path.exists() and new_name not in used_names: logger.debug(f"Alternativer Dateiname generiert: {new_name}") return new_path - + counter += 1 - + # Sicherheitsgrenze um Endlosschleifen zu vermeiden if counter > 1000: raise Exception("Zu viele alternative Dateinamen generiert") - + except Exception as e: logger.error(f"Fehler beim Generieren alternativer Dateinamen für {original_path}: {e}") # Fallback: Zeitstempel verwenden - import time timestamp = int(time.time()) fallback_name = f"{original_path.stem}_{timestamp}{original_path.suffix}" return xml_dir / fallback_name