You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dart在Windows生成目录列表时遇FileSystemException错误求助

解决Dart/Flutter生成目录列表的错误

首先,你的代码存在语法结构错误,其次在运行环境中访问C:\路径存在权限或系统隔离的问题,下面一步步帮你解决:

1. 修复代码的语法问题

你的代码把main函数嵌套在了listen的回调里,而且多个函数没有正确闭合,这会导致代码无法正常执行。修正后的代码应该是这样的:

import 'dart:io';

void listerine(Directory pat) {
  pat.list(recursive: true, followLinks: false).listen((FileSystemEntity entity) {
    print(entity.path); // 打印每个文件/目录的路径
  }, onError: (error) {
    print('访问单个条目出错: $error'); // 捕获单个文件/目录的访问错误,避免流程崩溃
  });
}

void main(List<String> arguments) {
  var root = Directory(r"C:\"); // 使用r前缀避免转义,也可以写成"C:\\"
  print(root);
  listerine(root);
}

2. 解决路径访问的核心错误

从你的日志I/flutter ( 7224)来看,你应该是在Android模拟器/设备上运行这段代码——这就是问题根源:

  • Android系统有自己独立的文件系统,它完全无法直接访问Windows电脑的C:\目录,这个路径在Android环境中根本不存在,所以会抛出No such file or directory错误。

如果你的目标是在Windows桌面运行(Flutter Desktop),那需要注意:

  • Windows的C盘根目录需要管理员权限才能遍历所有子目录和文件,普通权限下会因为权限不足无法访问某些系统目录,导致报错。你可以右键Android Studio,选择"以管理员身份运行",再启动你的Flutter Desktop项目。
  • 可以先测试访问一个权限较低的目录(比如Directory(r"C:\Users\你的用户名\Documents")),确认代码逻辑正常后,再尝试访问C盘根目录。

额外提示

  • 在遍历目录时,添加onError回调很有必要,它能捕获单个文件/目录的访问错误,避免整个遍历流程因为某个权限不足的目录直接崩溃。
  • 如果是开发跨平台应用,不要直接写死Windows专属路径,要适配不同平台的文件系统规则。

内容的提问来源于stack exchange,提问作者heisenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:39:17