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

Windows系统下Lua os.tmpname()函数返回路径问题咨询

问题1解答:以单个反斜杠开头的Windows路径属性

这类路径在Windows文件系统规则中属于根相对路径,既不是标准的相对路径(相对当前工作目录),也不是完整的绝对路径:

  • 它的实际指向是当前工作目录所在驱动器的根目录,而非当前工作目录本身。比如你当前工作目录为D:\projects\lua,那\s3e8.对应的完整路径是D:\s3e8.,这也是你直接调用io.open会尝试在根目录创建文件的原因。
  • 你之前看到的旧讨论帖中“相对于当前工作目录”的描述是错误的,不符合微软现行的Windows路径规范。

问题2解答:os.tmpname()不读取TMP环境变量的原因

你看到的读取TMP环境变量的规则是微软CRT库_tempnam()函数的专属逻辑,而Lua官方实现的os.tmpname()底层直接调用的是标准C库的tmpnam()函数,两者的行为逻辑完全不同:

  • 标准C的tmpnam()在Windows CRT的实现中,本身就不会读取TMP环境变量,默认只会生成这种根相对的短路径,这是标准库实现的固有行为,和你是否配置TMP环境变量无关。
  • 你使用的Lua 5.2以及mpv内置的静态编译Lua,都没有对os.tmpname()做Windows平台的适配修改,所以都会表现出相同的行为。

临时解决方案

如果需要生成符合预期的临时文件路径,可以手动实现逻辑:

  • 先用os.getenv("TMP")读取系统临时目录
  • 拼接上os.tmpname()返回的文件名部分(去掉开头的反斜杠)
  • 再调用io.open操作拼接后的完整路径
    也可以直接使用io.tmpfile()函数,它会直接在系统临时目录创建临时文件并返回句柄,无需自行处理路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:05