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

为何GML中file_text_read_string无法正常工作?

问题原因分析

核心问题是文件指针位置错误:

  • 第一个while循环里,你通过file_text_readln(file)逐行读取直到文件末尾,此时文件的读取指针已经移动到了文件最后(EOF位置)。
  • 后续的for循环尝试从同一个file句柄读取内容时,因为指针已经在末尾,file_text_read_string(file)只能读到空字符串。
  • 你用buffer_load读取文件是独立操作,它直接从文件开头加载内容,和之前file_text句柄的指针位置无关,所以变量s能正确获取内容,但这部分代码对填充数组没有帮助。
修正方案

方案1:重置文件指针到开头

统计完行数后,用file_text_seek(file, 0)把指针移回文件开头,再执行读取数组的循环:

lines= 0
var file = file_text_open_read("mygame.txt");

if (file!= -1){
    // 统计行数
    while (!file_text_eof(file)) {
        file_text_readln(file);
        lines++;
    }
    // 重置文件指针到开头
    file_text_seek(file, 0);
    // 读取内容到数组
    for (var i = 0; i < lines; ++i){
        arr[i] = file_text_read_string(file);
        file_text_readln(file);
    }
    file_text_close(file);
}

方案2:重新打开文件读取

统计行数后关闭文件,再重新打开一次读取内容:

lines= 0
var file = file_text_open_read("mygame.txt");

if (file!= -1){
    // 统计行数
    while (!file_text_eof(file)) {
        file_text_readln(file);
        lines++;
    }
    file_text_close(file);
    
    // 重新打开文件读取内容
    file = file_text_open_read("mygame.txt");
    for (var i = 0; i < lines; ++i){
        arr[i] = file_text_read_string(file);
        file_text_readln(file);
    }
    file_text_close(file);
}

方案3:用buffer读取后拆分字符串(更高效)

既然已经能用buffer读取完整内容,直接把字符串按换行符拆分到数组,省去两次读取文件的操作:

var file_buffer = buffer_load("mygame.txt");
var s = buffer_read(file_buffer, buffer_string);
buffer_delete(file_buffer);

// 按换行符拆分字符串到数组
arr = string_split(s, "\n");
// 注意:如果文件末尾有空行,可过滤空元素
for(var i = array_length(arr)-1; i >=0; i--){
    if(arr[i] == "") array_delete(arr, i, 1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:16:06