filesystem 组件是 OpenComputers 的标准文件与目录接口。它提供卷标、文件元数据查询、目录操作,以及基于句柄的文件读写能力。
和底层的 drive 组件相比,filesystem 是更高层、也更适合大多数 Lua 程序直接使用的存储接口。
- 仓库:
opencomputers - 组件名:
filesystem - 常见宿主:硬盘、软盘、RAID 卷、临时文件系统、挂载式存储
- 路径会在内部被规范化处理,试图通过
..跳出文件系统根目录的路径会被拒绝。 "/"和"."都会被当成文件系统根目录。- 文件句柄属于打开它的那台电脑。拿别的机器打开的句柄来用,会触发
"bad file descriptor"。 - 支持的打开模式只有:
"r"/"rb""w"/"wb""a"/"ab"
local component = require("component")
local fs = component.filesystem
if not fs then
error("当前环境没有 filesystem 组件")
end如果要操作特定磁盘,使用 component.proxy(address) 更稳妥。
- 语法:
fs.getLabel() - 返回值:
string或nil - 用途:读取卷标。
- 语法:
fs.setLabel(value) - 返回值:
string - 用途:修改卷标,并返回最终生效的标签。
源码里可能抛出的错误是 "drive does not support labeling"。
- 语法:
fs.isReadOnly() - 返回值:
boolean - 用途:判断当前文件系统是否只读。
- 语法:
fs.spaceTotal() - 返回值:
number - 用途:读取文件系统总容量,单位为字节。
如果底层后端报告的是无限容量,源码会返回正无穷。
- 语法:
fs.spaceUsed() - 返回值:
number - 用途:读取当前已使用容量,单位为字节。
- 语法:
fs.exists(path) - 返回值:
boolean - 用途:判断指定路径是否存在。
- 语法:
fs.size(path) - 返回值:
number - 用途:读取指定路径对应文件或目录项的大小。
- 语法:
fs.isDirectory(path) - 返回值:
boolean - 用途:判断指定路径是否为目录。
- 语法:
fs.lastModified(path) - 返回值:
number - 用途:读取指定路径对应对象的现实时间修改时间戳。
- 语法:
fs.list(path) - 返回值:
table或nil - 用途:列出某个目录中的名称列表。
如果该目录不存在,或底层后端无法列出内容,返回值会是 nil。
示例:
local entries = fs.list("/")
if entries then
for name in entries do
print(name)
end
end- 语法:
fs.makeDirectory(path) - 返回值:
boolean - 用途:创建目录,并在需要时顺带创建缺失的父目录。
行为说明:
- 创建成功时返回
true; - 如果路径已经存在,或者创建失败,则返回
false。
- 语法:
fs.remove(path) - 返回值:
boolean - 用途:删除文件,或递归删除整个目录树。
这个实现会先进入子目录删除子项,再删除父目录本身。
- 语法:
fs.rename(from, to) - 返回值:
boolean - 用途:重命名或移动一个路径对象。
- 语法:
fs.open(path[, mode]) - 返回值:
userdata - 用途:打开一个文件句柄。
参数说明:
path:string:要打开的路径。mode:string可选:默认值是"r"。
行为说明:
- 未知模式会抛出
"unsupported mode"; - 如果当前电脑超过配置允许的最大句柄数,会抛出
"too many open handles"; - 返回值是 userdata 句柄,后续读写和关闭都要继续使用它。
示例:
local handle = fs.open("/hello.txt", "w")
fs.write(handle, "hello\n")
fs.close(handle)- 语法:
fs.close(handle) - 返回值:没有直接返回值
- 用途:关闭一个已经打开的文件句柄。
源码里常见错误是 "bad file descriptor"。
- 语法:
fs.read(handle, count) - 返回值:
string或nil - 用途:从文件句柄中最多读取
count字节数据。
参数说明:
handle:userdatacount:number
行为说明:
- 到达 EOF 时返回
nil; - 读取大小会被限制在配置允许的最大读取缓冲区内;
- 常见错误包括:
"bad file descriptor""not enough energy"
- 语法:
fs.seek(handle, whence, offset) - 返回值:
number - 用途:修改文件指针位置,并返回新的位置。
参数说明:
handle:userdatawhence:string:只能是"set"、"cur"、"end";offset:number
未知的 whence 值会抛出 "invalid mode"。
- 语法:
fs.write(handle, value) - 返回值:
boolean - 用途:向一个已打开的文件句柄写入字节数据。
参数说明:
handle:userdatavalue:string
行为说明:
- 成功时返回
true; - 常见错误包括:
"bad file descriptor""not enough energy"
local handle = fs.open("/note.txt", "w")
fs.write(handle, "OpenComputers\n")
fs.close(handle)
handle = fs.open("/note.txt", "r")
print(fs.read(handle, 64))
fs.close(handle)drivedisk_drivecomponent