> ## Documentation Index
> Fetch the complete documentation index at: https://ppio.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 监视目录变化

export const SandboxConfigHint = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <Note>在运行本文档中的示例代码前，请确保您已正确配置环境变量，详情请参考 <a href="/sandbox/get-start#配置环境变量">配置环境变量</a>。</Note>;
  }
};

本节演示如何监视目录下文件的变化。

<SandboxConfigHint />

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={null}
  import { Sandbox, FilesystemEventType } from 'ppio-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  const dirname = '/tmp'

  // 开始监视目录的变化
  const handle = await sandbox.files.watchDir(dirname, async (event) => {
    console.log(`got event: ${event.type} - ${event.name}`)
    if (event.type === FilesystemEventType.WRITE) {
      console.log(`wrote to file ${event.name}`)
    }
  })

  // 触发文件写入事件
  await sandbox.files.write(`${dirname}/test-file`, 'test-file-content')

  // 停止监视
  handle.stop()

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={null}
  from ppio_sandbox.code_interpreter import Sandbox, FilesystemEventType

  sandbox = Sandbox.create()
  dirname = '/tmp'

  # 监视目录的变化
  handle = sandbox.files.watch_dir(dirname)
  # 触发文件写入事件
  sandbox.files.write(f"{dirname}/test-file", "test-file-content")

  # 获取自上次调用 `get_new_events()` 以来的最新事件
  events = handle.get_new_events()
  for event in events:
    print(f"got event: {event.type} - {event.name}")
    if event.type == FilesystemEventType.WRITE:
      print(f"wrote to file {event.name}")

  # 停止监视
  handle.stop()

  sandbox.kill()
  ```
</CodeGroup>

## 递归监视

如果需要监视到目录下子文件夹（包括多级嵌套的文件夹）内容的变化，您可以使用 `recursive` 参数启用 “递归监视”。

<Note>
  当快速创建新文件夹时（例如多级的文件夹路径），除了 `CREATE` 之外的事件可能不会被触发。为了避免这种行为，请提前创建所需的文件夹结构。
</Note>

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={null}
  import { Sandbox, FilesystemEventType } from 'ppio-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  const dirname = '/tmp'

  // 开始监视目录的变化
  const handle = await sandbox.files.watchDir(dirname, async (event) => {
    console.log(`got event: ${event.type} - ${event.name}`)
    if (event.type === FilesystemEventType.WRITE) {
      console.log(`wrote to file ${event.name}`)
    }
  }, {
    recursive: true
  })

  // 触发文件写入事件
  await sandbox.files.write(`${dirname}/test-folder/test-file`, 'test-file-content')

  // 停止监视
  handle.stop()

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={null}
  from ppio_sandbox.code_interpreter import Sandbox, FilesystemEventType

  sandbox = Sandbox.create()
  dirname = '/tmp'

  # 监视目录的变化
  handle = sandbox.files.watch_dir(dirname, recursive=True)
  # 触发文件写入事件
  sandbox.files.write(f"{dirname}/test-folder/test-file", "test-file-content")

  # 获取自上次 `get_new_events()` 调用以来的最新事件
  events = handle.get_new_events()
  for event in events:
    print(f"got event: {event.type} - {event.name}")
    if event.type == FilesystemEventType.WRITE:
      print(f"wrote to file {event.name}")

  # 停止监视
  handle.stop()

  sandbox.kill()
  ```
</CodeGroup>
