"""统计目录下C/C++文件的行数(write by AI)""" import os def count_lines(file_path): """统计单个文件的代码行数""" try: with open(file_path, 'rb') as f: # 二进制模式读取避免编码问题 return sum(1 for _ in f) except UnicodeDecodeError: print(f"警告:无法解码文件 {file_path}(可能不是文本文件)") return 0 except Exception as e: print(f"读取 {file_path} 出错: {str(e)}") return 0 def scan_files(directory, exclude_dirs=None): """扫描目录获取所有C/C++文件""" if exclude_dirs is None: exclude_dirs = ['.git', 'venv', '__pycache__'] # 默认排除的目录 c_files = [] for root, dirs, files in os.walk(directory): # 跳过排除目录 dirs[:] = [d for d in dirs if d not in exclude_dirs] for file in files: if file.endswith(('.c', '.h')): full_path = os.path.join(root, file) c_files.append(full_path) return c_files def main(): """main function""" target_dir = input("请输入要扫描的目录路径(留空为当前目录): ") or '.' files = scan_files(target_dir) total_lines = 0 print("\n统计结果:") for idx, file in enumerate(files, 1): lines = count_lines(file) total_lines += lines print(f"{idx:4d}. {file} ({lines} 行)") print(f"\n总计: {len(files)} 个C/C++文件,共 {total_lines} 行代码") if __name__ == "__main__": main()