Godot 4如何获取外部目录首个TXT文件并显示内容?
解决Godot读取首个TXT文件并显示的问题
错误原因分析
你遇到的get_as_text()接收到null错误,是因为FileAccess.open()返回了空值,说明文件路径无效或者没找到目标文件。你的dir_list函数存在几个核心问题:
- 未处理遍历到目录末尾(无更多文件)的情况,会导致循环异常或返回错误路径
- 使用
OS.get_executable_path()拼接路径逻辑错误,应该基于传入的目标目录路径拼接文件名 - 没有跳过
.、..这类系统默认目录项
修正后的实现方案
1. 跨平台获取Download目录路径
不要硬编码相对路径,用Godot提供的API获取系统标准Download目录,避免跨平台路径兼容问题:
var download_dir = OS.get_downloads_dir()
2. 可靠的首个TXT文件查找函数
func get_first_txt_file(dir_path: String) -> String: var dir = DirAccess.open(dir_path) if not dir: print("无法打开目录: ", dir_path) return "" dir.list_dir_begin(true) # true表示跳过隐藏文件 var file_name = dir.get_next() while file_name != "": # 跳过系统目录项,只筛选TXT文件(不区分大小写) if file_name != "." and file_name != ".." and file_name.get_extension().to_lower() == "txt": return dir_path.path_join(file_name) # 用系统兼容的方式拼接完整路径 file_name = dir.get_next() # 遍历完未找到TXT文件 print("目录下无TXT文件: ", dir_path) return ""
3. 读取文件内容并显示到Label
在挂载了Label的节点脚本中执行以下逻辑:
@onready var display_label: Label = $Label # 替换成你的Label节点路径 func _ready(): var target_file = get_first_txt_file(OS.get_downloads_dir()) if target_file == "": display_label.text = "未找到TXT文件" return var file = FileAccess.open(target_file, FileAccess.READ) if not file: display_label.text = "无法打开文件: " + target_file return display_label.text = file.get_as_text() file.close() # 操作完成后关闭文件
关键注意事项
- 打包游戏时需注意平台权限配置,确保游戏有权限读取系统Download目录
- 始终使用
path_join()方法拼接路径,避免手动拼接导致的跨平台路径分隔符错误 - 所有文件/目录操作必须检查返回值,提前处理异常情况
内容的提问来源于stack exchange,提问作者fabricio408 morales
相关产品推荐
相关产品推荐

