【发布时间】:2021-11-24 08:03:52
【问题描述】:
我正在尝试在 Windows 上使用 Lua 的 os.tmpname()(在后台使用 tmpnam()),但我对它返回的文件名感到有些困惑。
> print(os.tmpname())
\s3e8.
如果我像io.open(os.tmpname(), "w") 那样直接将它提供给 Lua,它将尝试在当前驱动器的根目录中创建文件。这似乎很不合适,因为我们通常无权这样做。
但是根据这个帖子:
https://mingw-users.narkive.com/L7VR1gxX/temporary-file-woes
这显然应该是相对于当前目录的路径。他们从 Microsoft 文档中提到了这个 sn-p:
请注意,当文件名前面带有反斜杠且没有路径时 信息,例如\fname21,这表明该名称是有效的 对于当前工作目录。
但是我再也找不到他们在帖子中提到的文档了。 我四处搜索,试图找到最新的文档并找到了这个: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tempnam-wtempnam-tmpnam-wtmpnam?view=msvc-160
这是上面文档中提到的生成规则:
_tempnam 将为通过以下规则选择的目录生成唯一的文件名:
如果定义了 TMP 环境变量并将其设置为有效 目录名,将为目录生成唯一的文件名 由 TMP 指定。
如果未定义 TMP 环境变量或将其设置为 不存在的目录的名称,_tempnam 将使用该目录 参数作为它将为其生成唯一名称的路径。
如果未定义 TMP 环境变量或将其设置为 不存在的目录的名称,如果 dir 为 NULL 或 设置为不存在的目录的名称,_tempnam 将使用 当前工作目录生成唯一名称。目前,如果 TMP 和 dir 都指定不存在的目录的名称, _tempnam 函数调用将失败。
我确实定义了 TMP 环境变量,但 Lua 总是生成我在顶部提到的那种路径。
真的,我有两个问题:
- 这实际上应该是相对路径吗?
- 如果是这样,为什么它总是生成相对路径,而不是使用标准的
TMP变量?
我正在使用来自 LuaBinaries 的 Lua 5.2 和静态内置到 shinchiro 的 mpv 构建中的 Lua 进行测试。
【问题讨论】: