# fsys.file 库模块帮助文档

## fsys 成员列表 <a id="fsys" href="#fsys">&#x23;</a>

### fsys.file("字符串参数") <a id="fsys.file" href="#fsys.file">&#x23;</a>
只读模式打开,文件必须存在。  
如果路径以斜杠结束,则作为目录打开。  
更多参数参考源码。  

fsys.file 不会将 `~\`或`~/` 目录不存在的路径自动退化为 `/` 目录下的路径。

### fsys.file("字符串参数","a") <a id="fsys.file" href="#fsys.file">&#x23;</a>
只写追加模式打开,创建新文件保留原文件

### fsys.file("字符串参数","a+") <a id="fsys.file" href="#fsys.file">&#x23;</a>
读写追加模式打开,创建新文件保留原文件

### fsys.file("字符串参数","r+") <a id="fsys.file" href="#fsys.file">&#x23;</a>
读写模式打开,文件必须存在  
文件路径也可以指定一个目录,可使用返回对象读写目录时间属性,  
更多参数参考源码

### fsys.file("字符串参数","w") <a id="fsys.file" href="#fsys.file">&#x23;</a>
只写模式打开,创建新文件清空原文件

### fsys.file("字符串参数","w+") <a id="fsys.file" href="#fsys.file">&#x23;</a>
读写模式打开,创建新文件清空原文件

### fsys.file("字符串参数","w+D") <a id="fsys.file" href="#fsys.file">&#x23;</a>
读写模式打开临时文件,关闭对象时自动删除文件

### fsys.file() <a id="fsys.file" href="#fsys.file">&#x23;</a>
[返回对象:fsysfileObject](#fsysfileObject)

### fsys.file(path,mode,shareMode,creation,flagsAndAttributes,secAttrib) <a id="fsys.file" href="#fsys.file">&#x23;</a>
所有参数可选,  
参数详细用法参考此函数源码与CreateFile参数用法,  
mode参数可指定数值指定打开模式,也可使用与io.file相同规则的描述字符  
shareMode参数默认为 _FILE_SHARE_READ | _FILE_SHARE_WRITE  
creation参数默认值为 _OPEN_EXISTING  
@flagsAndAttributes 为可选参数，指定文件属性,省略则自动设置此参数  
@secAttrib 不必指定

### fsys.file(文件句柄) <a id="fsys.file" href="#fsys.file">&#x23;</a>
可以指定文件、管道等句柄

### fsys.file(文件句柄,true) <a id="fsys.file" href="#fsys.file">&#x23;</a>
直接文件、管道等句柄  
添加析构函数负责释放句柄

## fsys.file 成员列表 <a id="fsys.file" href="#fsys.file">&#x23;</a>

用于打开或创建文件对象。  
fsys.file 是对系统 API CreateFile（CreateFileW）的封装，  
fsys.file 对象作为原生 API 函数的参数时会自动转换为系统文件句柄（原生 类型pointer）。  
使用 fsys.file 创建的的文件对象可传入其他线程使用（共享文件句柄）。

### fsys.file.is() <a id="fsys.file.is" href="#fsys.file.is">&#x23;</a>
判断参数是否 fsys.file 对象

### fsys.file.lastModified() <a id="fsys.file.lastModified" href="#fsys.file.lastModified">&#x23;</a>
参数 @1 指定文件路径，返回文件最后修改时间。  
返回值是 time.gmt 对象，即 RFC1123 格式时间。HTTP 协议使用该对象  

[返回对象:timeObject](https://www.aardio.com/zh-cn/docs/library-reference/time/_.html#timeObject)

### fsys.file.lastModified(,"2024/1/1 11:01:00") <a id="fsys.file.lastModified" href="#fsys.file.lastModified">&#x23;</a>
参数 @1 指定文件路径，\b参数 @2 指定任何可作为 time.iso8601 参数的时间格式，可指定字符串。  
如果文件修改时间大于参数 @2 指定的时间则返回 true

### fsys.file.lines(path) <a id="fsys.file.lines" href="#fsys.file.lines">&#x23;</a>

```aardio
for line in fsys.file.lines(/*请输入逐行读取的文本文件路径*/) { 

}
```

### fsys.file.temp() <a id="fsys.file.temp" href="#fsys.file.temp">&#x23;</a>
[返回对象:fsysfileObject](#fsysfileObject)

### fsys.file.temp(pathOrExt,dontDeleteOnClose) <a id="fsys.file.temp" href="#fsys.file.temp">&#x23;</a>
创建临时文件,  
可选用 @pathOrExt 参数指定临时文件路径或后缀名,  
指定临时文件后缀名时第一个字符必须是 `.` 号,  
可选指定 @dontDeleteOnClose 参数值为 true 禁止关闭对象自动删除文件,  
@dontDeleteOnClose 为 true 时文件才会有共享读写权限,  
可通过返回文件对象的 path 属性获取临时文件路径

## filefiletimesObject 成员列表 <a id="filefiletimesObject" href="#filefiletimesObject">&#x23;</a>

### filefiletimesObject.access <a id="filefiletimesObject.access" href="#filefiletimesObject.access">&#x23;</a>
文件最后访问时间  

[返回对象:fsysTimeObject](#fsysTimeObject)

### filefiletimesObject.creation <a id="filefiletimesObject.creation" href="#filefiletimesObject.creation">&#x23;</a>
文件创建时间  

[返回对象:fsysTimeObject](#fsysTimeObject)

### filefiletimesObject.write <a id="filefiletimesObject.write" href="#filefiletimesObject.write">&#x23;</a>
文件最后修改时间  

[返回对象:fsysTimeObject](#fsysTimeObject)

## filetimesObject 成员列表 <a id="filetimesObject" href="#filetimesObject">&#x23;</a>

### filetimesObject.access <a id="filetimesObject.access" href="#filetimesObject.access">&#x23;</a>
文件最后访问时间  

[返回对象:timeObject](https://www.aardio.com/zh-cn/docs/library-reference/time/_.html#timeObject)

### filetimesObject.creation <a id="filetimesObject.creation" href="#filetimesObject.creation">&#x23;</a>
文件创建时间  

[返回对象:timeObject](https://www.aardio.com/zh-cn/docs/library-reference/time/_.html#timeObject)

### filetimesObject.write <a id="filetimesObject.write" href="#filetimesObject.write">&#x23;</a>
文件最后修改时间  

[返回对象:timeObject](https://www.aardio.com/zh-cn/docs/library-reference/time/_.html#timeObject)

## fsysfileObject 成员列表 <a id="fsysfileObject" href="#fsysfileObject">&#x23;</a>

### fsysfileObject.close() <a id="fsysfileObject.close" href="#fsysfileObject.close">&#x23;</a>
关闭文件句柄

### fsysfileObject.delete() <a id="fsysfileObject.delete" href="#fsysfileObject.delete">&#x23;</a>
关闭并删除文件

### fsysfileObject.deviceIoControl <a id="fsysfileObject.deviceIoControl" href="#fsysfileObject.deviceIoControl">&#x23;</a>
对设备驱动程序发送控制指令

### fsysfileObject.deviceIoControl(控制码,输入结构体,输出结构体) <a id="fsysfileObject.deviceIoControl" href="#fsysfileObject.deviceIoControl">&#x23;</a>
参数可以为空或结构体,  
输出结构体也可以是 raw.buffer 分配的缓冲区,  
成功返回true,以及读取的字节数

### fsysfileObject.flush() <a id="fsysfileObject.flush" href="#fsysfileObject.flush">&#x23;</a>
刷新缓冲区

### fsysfileObject.getFileTime() <a id="fsysfileObject.getFileTime" href="#fsysfileObject.getFileTime">&#x23;</a>
返回创建时间、最后修改时间、最后访问时间，  
所有返回时间为 UTC 标准时间  

[返回对象:filefiletimesObject](#filefiletimesObject)

### fsysfileObject.getTime() <a id="fsysfileObject.getTime" href="#fsysfileObject.getTime">&#x23;</a>
返回创建时间、最后修改时间、最后访问时间，  
所有返回时间为 UTC 标准时间  

[返回对象:filetimesObject](#filetimesObject)

### fsysfileObject.handle <a id="fsysfileObject.handle" href="#fsysfileObject.handle">&#x23;</a>
返回文件句柄

### fsysfileObject.lastModified() <a id="fsysfileObject.lastModified" href="#fsysfileObject.lastModified">&#x23;</a>
返回最后修改时间,返回值是time.gmt对象,  
即RFC1123格式时间,HTTP协议使用该对象  

[返回对象:timeObject](https://www.aardio.com/zh-cn/docs/library-reference/time/_.html#timeObject)

### fsysfileObject.lines() <a id="fsysfileObject.lines" href="#fsysfileObject.lines">&#x23;</a>

```aardio
for line in fsysfileObject.lines(){
	/*逐行读取文件，循环返回当前行（字符串值）。  
无论是否以文本模式打开，读取数据总是移除回车符与换行符。*/	
}
```

### fsysfileObject.path <a id="fsysfileObject.path" href="#fsysfileObject.path">&#x23;</a>
返回文件路径

### fsysfileObject.read() <a id="fsysfileObject.read" href="#fsysfileObject.read">&#x23;</a>
读取一行文本  
返回文本不包含回车换行符

### fsysfileObject.read(-1) <a id="fsysfileObject.read" href="#fsysfileObject.read">&#x23;</a>
读取所有内容到文件尾部

### fsysfileObject.read(0) <a id="fsysfileObject.read" href="#fsysfileObject.read">&#x23;</a>
是否未到达文件尾。  
如果已经到达文件尾返回 null，否则返回空字符串。  
注意在布尔表达式工 null 等于 false，空字符串等于 true。

### fsysfileObject.read({int number} ) <a id="fsysfileObject.read" href="#fsysfileObject.read">&#x23;</a>
读取结构体  
不支持多参数

### fsysfileObject.read(字节数) <a id="fsysfileObject.read" href="#fsysfileObject.read">&#x23;</a>
读取指定长度的字节  
不支持多参数

### fsysfileObject.readAll() <a id="fsysfileObject.readAll" href="#fsysfileObject.readAll">&#x23;</a>
移动指针到文件头，  
读取到文件尾返回全部数据。  
改用 -1 为参数调用 read 函数可自当前位置读取到文件尾。

### fsysfileObject.readBuffer <a id="fsysfileObject.readBuffer" href="#fsysfileObject.readBuffer">&#x23;</a>
读取数据到 buffer ,成功返回读取长度,失败返回null

### fsysfileObject.readBuffer(buffer,读取长度) <a id="fsysfileObject.readBuffer" href="#fsysfileObject.readBuffer">&#x23;</a>
直接读数据到内存  
参数@1可以是 buffer 对象,或内存指针,  
如果是指针则必须指定读取长度,否则长度参数可选  
成功返回读取长度

### fsysfileObject.readTo <a id="fsysfileObject.readTo" href="#fsysfileObject.readTo">&#x23;</a>
读取直到以指定的字符串结束

### fsysfileObject.readTo('结束串') <a id="fsysfileObject.readTo" href="#fsysfileObject.readTo">&#x23;</a>
读取直到以指定的字符串结束,返回值不包含结束串,  
该函数每次仅读取一个字节,效率较低

### fsysfileObject.seek("cur",) <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
移动至相对当前位置的指定偏移量，  
偏移量应当是一个普通数值。

### fsysfileObject.seek("end") <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
移动指针至结束处  
返回当前位置,返回值大于2GB则为负值,  
获取文件大小推荐使用 size() 函数

### fsysfileObject.seek("end",) <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
移动至相对结束处的指定偏移量，  
偏移量应当是一个普通数值。

### fsysfileObject.seek("set") <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
移动指针到开始

### fsysfileObject.seek("set",) <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
移动至相对开始处的指定偏移量，  
偏移量应当是一个普通数值。  

普通数值的整数上限为 8PB，没有可能会写这么大的文件。  
所以偏移量不支持、也不必要使用 math.size64 对象

### fsysfileObject.seek() <a id="fsysfileObject.seek" href="#fsysfileObject.seek">&#x23;</a>
得到当前位置

### fsysfileObject.setFileTime(creation=创建时间;access=访问时间;write=修改时间) <a id="fsysfileObject.setFileTime" href="#fsysfileObject.setFileTime">&#x23;</a>

```aardio
fsysfileObject.setFileTime(  
	creation = fsys.time();  
	access = fsys.time();  
	write = fsys.time()   
)
```

### fsysfileObject.setTime(creation=创建时间;access=访问时间;write=修改时间) <a id="fsysfileObject.setTime" href="#fsysfileObject.setTime">&#x23;</a>

```aardio
fsysfileObject.setTime(  
	creation = time();  
	access = time();  
	write = time()   
)
```

### fsysfileObject.seteof() <a id="fsysfileObject.seteof" href="#fsysfileObject.seteof">&#x23;</a>
将当前文件位置设为文件末尾,  
用于快速改变文件大小  
成功返回true

### fsysfileObject.size() <a id="fsysfileObject.size" href="#fsysfileObject.size">&#x23;</a>
返回文件大小。  
size 函数表示的容量可以达到 8PB，一般不必要 size64 函数，  
math.size64 对象主要用于格式化为适合单位表示的文本。

### fsysfileObject.size64() <a id="fsysfileObject.size64" href="#fsysfileObject.size64">&#x23;</a>
返回文件大小。  
返回值为 math.size64 长整数对象。  
可调用返回对象的 format 函数格式化为适合单位表示的文本。  

[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/docs/library-reference/math/_.html#mathSize64Object)

### fsysfileObject.type() <a id="fsysfileObject.type" href="#fsysfileObject.type">&#x23;</a>
获取文件对象的类型  
例如控制台，管道，本地文件....等等  
返回值请参考_FILE_TYPE_前缀的常量

### fsysfileObject.write(字符串) <a id="fsysfileObject.write" href="#fsysfileObject.write">&#x23;</a>
写入字符串  
参数也可以是数值、结构体

### fsysfileObject.writeBuffer <a id="fsysfileObject.writeBuffer" href="#fsysfileObject.writeBuffer">&#x23;</a>
写入缓冲区数据,成功返回写入长度,失败返回null

### fsysfileObject.writeBuffer(buffer,写入长度) <a id="fsysfileObject.writeBuffer" href="#fsysfileObject.writeBuffer">&#x23;</a>
直接写数据到内存  
参数@1可以是 buffer 对象、字符串、内存指针。  
如果是指针则必须指定写入长度，否则长度参数可选。  
成功返回写入长度

### 自动完成常量
_FILEOPENORD=0x600  
_FILE_ATTRIBUTE_ARCHIVE=0x20  
_FILE_ATTRIBUTE_COMPRESSED=0x800  
_FILE_ATTRIBUTE_DIRECTORY=0x10  
_FILE_ATTRIBUTE_HIDDEN=2  
_FILE_ATTRIBUTE_NORMAL=0x80  
_FILE_ATTRIBUTE_READONLY=1  
_FILE_ATTRIBUTE_SYSTEM=4  
_FILE_ATTRIBUTE_TEMPORARY=0x100  
_FILE_BEGIN=0x0  
_FILE_CASE_PRESERVED_NAMES=2  
_FILE_CASE_SENSITIVE_SEARCH=1  
_FILE_CURRENT=1  
_FILE_END=2  
_FILE_FILE_COMPRESSION=0x10  
_FILE_FLAG_BACKUP_SEMANTICS=0x2000000  
_FILE_FLAG_DELETE_ON_CLOSE=0x4000000  
_FILE_FLAG_NO_BUFFERING=0x20000000  
_FILE_FLAG_OVERLAPPED=0x40000000  
_FILE_FLAG_POSIX_SEMANTICS=0x1000000  
_FILE_FLAG_RANDOM_ACCESS=0x10000000  
_FILE_FLAG_SEQUENTIAL_SCAN=0x8000000  
_FILE_FLAG_WRITE_THROUGH=0x80000000  
_FILE_NOTIFY_CHANGE_ATTRIBUTES=4  
_FILE_NOTIFY_CHANGE_DIR_NAME=2  
_FILE_NOTIFY_CHANGE_FILE_NAME=1  
_FILE_NOTIFY_CHANGE_LAST_WRITE=0x10  
_FILE_NOTIFY_CHANGE_SECURITY=0x100  
_FILE_NOTIFY_CHANGE_SIZE=0x8  
_FILE_PERSISTENT_ACLS=0x8  
_FILE_SHARE_DELETE=4  
_FILE_SHARE_READ=1  
_FILE_SHARE_WRITE=2  
_FILE_TYPE_CHAR=2  
_FILE_TYPE_DISK=1  
_FILE_TYPE_PIPE=3  
_FILE_TYPE_REMOTE=0x8000  
_FILE_TYPE_UNKNOWN=0x0  
_FILE_UNICODE_ON_DISK=4  
_FILE_VOLUME_IS_COMPRESSED=0x8000  
