如何在Lua中创建一个目录?

16

能否在Lua中创建目录?如果可以,怎样创建?

4个回答

25

你可以发现LuaFileSystem库很实用,它有一个mkdir函数。

require "lfs"
lfs.mkdir("/path/to/dir")

谢谢提供链接!目前我不能使用其他库,所以我会继续使用os.execute()版本,但下次我会记住LuaFileSystem! - Wookai

25

有一个"system"调用(或类似于此的内容,这是我记忆中的),你应该能够使用它来运行任意程序,其中可以包括mkdir命令。

编辑:我找到了我的《Lua编程》书。在第203页上,它提到了如何使用一个

os.execute("mkdir " .. dirname)

模拟创建目录命令。

编辑2:请注意Jonas Thiem的警告,如果目录名来自不受信任的来源,则可能会被滥用!


10
Lua的设计理念是纯ISO C,以便于在任何具有C编译器的设备上移植。C标准库中没有目录创建函数,这留给平台特定的扩展来完成,例如在POSIX系统上的mkdir(2),以及在Windows上的CreateDirectory*()。 - Warren Young
谢谢 ;)!我知道我可以使用这种类型的execute(),但我想知道是否有Lua的替代方法...我猜没有;)! - Wookai
3
这个回复非常危险。一旦您的目录名包含分号,后面跟着实际的bash命令,您就会为自己设置一个漂亮的任意命令执行漏洞。务必正确地转义目录名,或者避免使用这个糟糕的建议,改用LuaFileSystem来正确地执行操作。 - E. T.
2
感谢指出现在有一个LuaFileSystem库可以做这种事情!我已经点赞了建议使用它的答案。但是,您是否也谴责Lua作者在自己的书中推荐使用此技术?如果目录名称来自可信源(例如在程序中硬编码),则os.execute()方法完全可以使用,并且它具有不需要任何Lua标准库之外的库的优点。 - Carl Smotricz
正确地转义文件名并不容易,即使Lua的作者建议这样做,我也建议不要这样做。最好使用适当的扩展库。它可以工作,但除非您非常熟悉可能的漏洞(在文件名中有很多看起来正常的字符,但会在bash中执行某些操作,并突然将任意命令执行引入到您的简单目录创建中),否则它是不安全的,或者如果文件名是硬编码的。如果作者没有添加这样强的安全建议,那么我认为书中的这一部分应该进行修订。 - E. T.

3
您可能还想看一下Lua/APR,这是Lua的Apache可移植运行库绑定。文档可以在这里找到。
我使用Lua的原因之一是我可以编写可以在多个操作系统上运行的代码。我曾经使用过LFS,但发现使用Lua/APR提供了更加平台中立的库。此外,APR中还有许多其他有用的例程。

2
您可以使用paths软件包代替。然后您只需执行以下操作:
require 'paths'

paths.mkdir('your/dir')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接