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

使用Flutter Sound录音报No such file or directory错误如何解决

报错原因

你遇到的ENOENT (No such file or directory)错误,核心原因是getApplicationDocumentsDirectory()返回的应用私有文档目录(对应路径里的app_flutter文件夹)在部分设备、系统版本上不会默认自动创建,直接向不存在的目录写入录音文件就会触发该异常。手动拼接路径时硬编码斜杠也可能在部分平台触发路径格式错误。

修复方案

核心逻辑是:拿到目标目录路径后,先校验目录是否存在,不存在则递归创建所有缺失的目录层级,再拼接文件路径写入录音。

  1. 先引入所需的内置/官方插件依赖:
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path; // 用于安全拼接路径,适配多平台分隔符规则
  1. 替换原有路径获取逻辑,增加目录校验创建步骤:
// 获取应用文档目录
Directory appDocDir = await getApplicationDocumentsDirectory();

// 校验目录是否存在,不存在则递归创建全路径目录
if (!await appDocDir.exists()) {
  await appDocDir.create(recursive: true);
}

// 安全拼接录音文件路径,不要手动硬编码斜杠
String recordFileName = '${DateTime.now().millisecondsSinceEpoch}.wav';
filepath = path.join(appDocDir.path, recordFileName);

// 后续初始化录音机逻辑保持不变
_myRecorder = FlutterSoundRecorder();
额外场景说明
  • 如果你需要将录音分类存到子文件夹(例如专门的recordings目录),对子目录也要做相同的存在校验和创建逻辑:
// 定义录音专属子目录
Directory audioDir = Directory(path.join(appDocDir.path, 'recordings'));
if (!await audioDir.exists()) {
  await audioDir.create(recursive: true);
}
// 最终文件路径指向子目录
filepath = path.join(audioDir.path, recordFileName);
  • create(recursive: true)参数可以保证路径上所有缺失的父目录都会被自动创建,不会出现多层级目录找不到的问题。
  • getApplicationDocumentsDirectory()返回的是应用私有存储目录,在Android 10及以上版本不需要额外申请存储读写权限即可正常读写,不会触发权限异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:48:06