临时目录创建子目录报OS Error: Not a directory的问题排查
问题分析与解决方案
报错OS Error: Not a directory, errno = 20的核心原因是:你要创建的目标路径(或其上级路径)已经存在一个同名文件(而非目录),导致系统无法在该路径下创建目录。临时/缓存目录本身完全支持创建子目录,不是系统限制或配置遗漏问题,以下是具体排查和解决步骤:
排查与修复步骤
检查路径冲突
先确认目标路径是否存在同名文件,若存在则删除后再创建目录:createDirectory(String name) async { final fileDir = await getTemporaryDirectory(); final targetPath = '${fileDir.path}/$name'; // 检查路径对应的实体类型 final entityType = await FileSystemEntity.type(targetPath); if (entityType == FileSystemEntityType.file) { // 删除同名文件 await File(targetPath).delete(); } final Directory newFileDir = await Directory(targetPath).create(recursive: true); }校验目录名称合法性
确保name参数不包含路径分隔符(如/、\)或系统非法字符,这些字符会导致路径层级解析错误。可以对名称做安全处理:createDirectory(String name) async { final fileDir = await getTemporaryDirectory(); // 替换所有系统非法字符为下划线 final safeName = name.replaceAll(RegExp(r'[\\/:*?"<>|]'), '_'); final targetPath = '${fileDir.path}/$safeName'; final Directory newFileDir = await Directory(targetPath).create(recursive: true); }验证临时目录有效性
打印fileDir.path,确认该路径是合法的应用专属临时目录(比如iOS沙盒内的tmp目录、Android的cache目录),手动检查该目录是否存在且具备读写权限。若目录本身异常,可尝试重启应用或清理应用缓存后重试。
内容的提问来源于stack exchange,提问作者Lyn
相关产品推荐
相关产品推荐

