diff --git a/modules/file_manager.py b/modules/file_manager.py index 3ee1f2b..ae8bfd8 100644 --- a/modules/file_manager.py +++ b/modules/file_manager.py @@ -29,12 +29,15 @@ except ImportError: # 兼容全局环境中存在同名包的情况 PROJECT_MAX_STORAGE_BYTES, ) from modules.container_file_proxy import ContainerFileProxy +from utils.logger import setup_logger if TYPE_CHECKING: from modules.user_container_manager import ContainerHandle # 临时禁用长度检查 DISABLE_LENGTH_CHECK = True + +logger = setup_logger(__name__) class FileManager: def __init__(self, project_path: str, container_session: Optional["ContainerHandle"] = None): self.project_path = Path(project_path).resolve() @@ -68,16 +71,24 @@ class FileManager: return self._container_proxy.run(action, payload) def _get_project_size(self) -> int: - """计算项目目录的总大小(字节)""" + """计算项目目录的总大小(字节),遇到异常时记录并抛出。""" total = 0 if not self.project_path.exists(): return 0 + for path in self.project_path.rglob('*'): - try: - if path.is_file(): - total += path.stat().st_size - except PermissionError: + if not path.is_file(): continue + try: + total += path.stat().st_size + except Exception as exc: + logger.error( + "Failed to stat %s while calculating project size: %s", + path, + exc, + exc_info=True, + ) + raise return total def _validate_path(self, path: str) -> Tuple[bool, str, Path]: