# 多文件读取 (readmanyfiles)

> readmanyfiles 之前作为独立工具暴露，但已重构为内部工具函数。模型不再直接调用它——相反，readfile、glob 和 grepsearch 工具覆盖了单个和多个文件的读取。以下信息保留以供参考。

- 网址：https://funcoding.ai/agents/qwen-code/developers/tools/multi-file/
- 来源：Qwen Code 官方文档原文（中文），Apache-2.0 许可，同步于 2026-10-11
- 官方原文：https://qwenlm.github.io/qwen-code-docs/zh/developers/tools/multi-file

---
<div class="callout callout-note">

`read_many_files` 之前作为独立工具暴露，但已重构为内部工具函数。模型不再直接调用它——相反，`read_file`、`glob` 和 `grep_search` 工具覆盖了单个和多个文件的读取。以下信息保留以供参考。

</div>

## 描述

`read_many_files` 读取由路径或 glob 模式指定的多个文件的内容。行为取决于文件类型：

- 对于文本文件，此工具会将它们的内容拼接成单个字符串。
- 对于图像（例如 PNG、JPEG）、PDF、音频（MP3、WAV）和视频（MP4、MOV）文件，它会读取并以 base64 编码数据的形式返回它们，前提是这些文件已通过名称或扩展名明确请求。

`read_many_files` 可用于执行以下任务：获取代码库概览、查找特定功能的实现位置、查看文档，或从多个配置文件中收集上下文。

**注意：** `read_many_files` 会根据提供的路径或 glob 模式查找文件。诸如 `"/docs"` 这样的目录路径将返回空结果；该工具需要一个模式，例如 `"/docs/*"` 或 `"/docs/*.md"` 来标识相关文件。

### 参数

`read_many_files` 接受以下参数：

- `paths` (list[string]，必需)：相对于工具目标目录的 glob 模式或路径数组（例如 `["src/**/*.ts"]`、`["README.md", "docs/*", "assets/logo.png"]`）。
- `exclude` (list[string]，可选)：要排除的文件/目录的 glob 模式（例如 `["**/*.log", "temp/"]`）。如果 `useDefaultExcludes` 为 true，这些模式会添加到默认排除项中。
- `include` (list[string]，可选)：要包含的额外 glob 模式。这些模式会与 `paths` 合并（例如 `["*.test.ts"]` 用于专门添加被广泛排除的测试文件，或 `["images/*.jpg"]` 用于包含特定图像类型）。
- `recursive` (boolean，可选)：是否递归搜索。这主要由 glob 模式中的 `**` 控制。默认为 `true`。
- `useDefaultExcludes` (boolean，可选)：是否应用默认排除模式列表（例如 `node_modules`、`.git`、非图像/PDF 的二进制文件）。默认为 `true`。
- `respect_git_ignore` (boolean，可选)：是否在查找文件时尊重 `.gitignore` 模式。默认为 true。

## 如何将 `read_many_files` 与 Qwen Code 结合使用

`read_many_files` 搜索与提供的 `paths` 和 `include` 模式匹配的文件，同时遵守 `exclude` 模式和默认排除项（如果启用）。

- 对于文本文件：它会读取每个匹配文件的内容（尝试跳过未明确请求为图像/PDF 的二进制文件），并拼接成单个字符串，每个文件内容之间用分隔符 `--- {filePath} ---` 分隔。默认使用 UTF-8 编码。
- 工具在最后一个文件后插入 `--- End of content ---`。
- 对于图像和 PDF 文件：如果通过名称或扩展名明确请求（例如 `paths: ["logo.png"]` 或 `include: ["*.pdf"]`），工具会读取文件并以 base64 编码字符串的形式返回其内容。
- 工具会通过检查文件初始内容中的空字节，尝试检测并跳过其他二进制文件（不匹配常见图像/PDF 类型或未明确请求的文件）。

用法：

```
read_many_files(paths=["Your files or paths here."], include=["Additional files to include."], exclude=["Files to exclude."], recursive=False, useDefaultExcludes=false, respect_git_ignore=true)
```

## `read_many_files` 示例

读取 `src` 目录中的所有 TypeScript 文件：

```
read_many_files(paths=["src/**/*.ts"])
```

读取主 README、`docs` 目录中的所有 Markdown 文件以及特定的 logo 图像，排除特定文件：

```
read_many_files(paths=["README.md", "docs/**/*.md", "assets/logo.png"], exclude=["docs/OLD_README.md"])
```

读取所有 JavaScript 文件，但明确包含测试文件和 `images` 文件夹中的所有 JPEG：

```
read_many_files(paths=["**/*.js"], include=["**/*.test.js", "images/**/*.jpg"], useDefaultExcludes=False)
```

## 重要说明

- **二进制文件处理：**
  - **图像/PDF/音频/视频文件：** 该工具可以读取常见的图像类型（PNG、JPEG 等）、PDF、音频（mp3、wav）和视频（mp4、mov）文件，并以 base64 编码数据的形式返回。这些文件**必须**通过 `paths` 或 `include` 模式明确指定（例如，指定确切的文件名如 `video.mp4` 或模式如 `*.mov`）。
  - **其他二进制文件：** 该工具会尝试通过检查文件初始内容中的空字节来检测并跳过其他类型的二进制文件。工具会在输出中排除这些文件。
- **性能：** 读取大量文件或非常大的单个文件可能会消耗大量资源。
- **路径特异性：** 确保路径和 glob 模式相对于工具的目标目录正确指定。对于图像/PDF 文件，确保模式足够具体以包含它们。
- **默认排除项：** 注意默认排除模式（如 `node_modules`、`.git`），如果需要覆盖它们，请使用 `useDefaultExcludes=False`，但请谨慎操作。
