C语言Lua os.remove()

前言#

今来拘禁之这个函数看似普通,但可花了自己无数时日来调节,提前证实一下自家以的lua源代码的本子是5.1.4,版本是事物特别意外,明明以此版很好用底函数,下单版本可能就是去了,很想得到吧!今天咱们看的这个函数也同本子有关。

内容#


os.remove()

  • 原型:os.remove (filename)
  • 诠释:删除文件要一个空目录,若函数调用失败则返加nil添加错误信息。

Usage

  • 第一我们新建一个文书命名也removetest.lua编写如下代码:

-- 删除存在的文件
local rm_file = os.remove("remove_test.txt");
print("remove exist file ret:")
print(rm_file)
print("\n")

-- 删除不存在的文件
local rm_notexist_file = os.remove("remove_test2.txt");
print("remove don't exist file ret:")
print(rm_notexist_file)
print("\n")

-- 删除存在的目录
local rm_dir = os.remove("mydir")
print("remove exist dir ret:")
print(rm_dir)
print("\n")

-- 删除不存在的目录
local rm_notexist_dir = os.remove("mydir2")
print("remove don't exist dir ret:")
print(rm_notexist_dir)
print("\n")

-- 终极杀招 调用系统命令删目录
local cmd_rm = os.execute("rd mydir")
print("remove exist dir with sys cmd ret:")
print(cmd_rm)
if cmd_rm == 0 then
    print("remove exist dir with sys cmd success")
end
  • 运转结果:

removefile.png

  • 有关运行结果的琢磨:

  • 是因为运行结果的前头片组好看到:当要删除的公文是时时,调用os.remove()会成删除文件又返回true,而当要抹的文件不有时时,函数返回nil当下是符合预期结果的。

  • 鉴于运行结果第3、4组可以看看无论如刨除的目是否留存,执行函数后全无法得逞删除目录返回nil,这即值得沉思了,明明文档里描写了足以去除目录怎么交了马上特别了邪,处于同一体面懵逼的自家只能失去查看了一下lua的个各个版本的合法文档,结果再行懵逼了。

    • 预先来探望Lua 5.0,这压根就没涉及可以去目录的工作啊!!!

Deletes the file with the given name. If this function fails, it
returns nil, plus a string describing the error.

- 然后是**Lua 5.1**,确实和我上面的解释是一样的。

Deletes the file or directory with the given name.Directories must be
empty to be removed.If this function fails, it returns nil,plus a
string describing the error.

  • 最后是完全相同的Lua 5.2、5.3,他竟提到了“C语言POSIX
    systems”,那自己用的Windows岂不是行不通了。

Deletes the file (or empty directory, on POSIX systems)with the given
name.If this function fails, it returns nil,plus a string
describing the error and the error code.

  • 沿这发现我以看了一下Lua
    5.1版的源码,调用的凡c语言的int remove(char * filename);函数,网上搜了瞬间夫函数的分解为:“filename为要去除的文件称,可以吧同样索引。如果参数filename
    为同一文件,则调用unlink()处理;若参数filename
    为同样目录,则调用rmdir()来拍卖”。可是事实证明这当windows系统上吗是休起之,我于C语言中动用int remove(char * filename);函数去去目录,得到的结果是没有权限,一开始自己信了,然后我本着要删减的文本夹进行了疯之权能修改,最终还是勿克去,然后自己便想只要我要好创造的文件夹,你究竟该于自家去了咔嚓,于是我还要调用c语言的mkdir()函数来创造了一个文书夹,然后重新去,得到的结果或者不曾权限,这次我掌握了,在windows系统下int remove(char * filename);这函数或许就没有去除目录的功用,于是自己安静了,祭出同样起宝贝,调用system("rd mydir")函数成功用引得删除,小样,还看不了你了!

总结#

  • os.remove(filename)刚巧而他的参数名字同样,删除文件是不曾问题的,但是去目录就扣留情形了。
  • 当遇函数的运行结果以及团结的料不一样时,多夺源头找找原因,比如翻翻官方文档。