# fsys.table 库模块帮助文档

## fsys 成员列表 <a id="fsys" href="#fsys">&#x23;</a>

### fsys.table <a id="fsys.table" href="#fsys.table">&#x23;</a>
`文件同步表`对象。  
支持将 table 对象自动序列化为硬盘文件。  
fsys.table 可作为普通 table 对象使用，  
在线程退出时将会同步存储到文件中。  

一般建议直接使用 fsys.config

### fsys.table("/config/setting.table",默认配置表 ) <a id="fsys.table" href="#fsys.table">&#x23;</a>
创建`文件同步表`，在线程退出时将会同步存储到文件中。  
可选使用 参数@2 指定一个 table 对象指定字段的默认值。  

fsys.table 并非实时读写，而是将配置读入内存。  
所以请不要多对象、多线程、多进程打开同一配置文件。  
这会导致多份不同步的配置写入存储设备时会相互覆盖。  

注意此对象不可跨线程传递。  
多线程可通过 winform 成员函数转发到界面线程操作配置文件即可，  
多进程可利用原子窗体、进程互斥体避免冲突。  
如果必须要在多线程打开相同的文件，  
请调用 enableAutoSave 方法禁用自动保存功能。

### fsys.table() <a id="fsys.table" href="#fsys.table">&#x23;</a>
[返回对象:fsysTableObject](#fsysTableObject)

## fsysTableObject 成员列表 <a id="fsysTableObject" href="#fsysTableObject">&#x23;</a>

### fsysTableObject.* <a id="fsysTableObject.any" href="#fsysTableObject.any">&#x23;</a>
自`文件同步表`读写属性。  
在保存时会使用 table.tostring 函数序列化`文件同步表`到文件中。  
限制：  
仅序列化以字符串、数值为键的元素，  
仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。  
循环引用的值转换为 null，序列化时忽略成员函数。  

配置文件在首次使用时自动加载，默认在退出程序时自动保存。

### fsysTableObject.afterLoad <a id="fsysTableObject.afterLoad" href="#fsysTableObject.afterLoad">&#x23;</a>
指定一个函数,在下次重新加载配置文件时调用  
此函数默认为空函数,在调用 winform.bindConfig 后会被自动赋值用于写入控件值

### fsysTableObject.assign() <a id="fsysTableObject.assign" href="#fsysTableObject.assign">&#x23;</a>
[返回对象:fsysTableObject](#fsysTableObject)

### fsysTableObject.assign(混入表) <a id="fsysTableObject.assign" href="#fsysTableObject.assign">&#x23;</a>

```aardio
fsysTableObject.assign(  
   键名 = 值;  
   键名2 = 值;  
);//该数会自动调用 save 函数保存配置到文件
```

### fsysTableObject.beforeSave <a id="fsysTableObject.beforeSave" href="#fsysTableObject.beforeSave">&#x23;</a>
指定一个函数,在保存配置以前自动调用  
此函数默认为空函数,在调用 winform.bindConfig 后会被自动赋值用于读取控件值

### fsysTableObject.enableAutoSave(false) <a id="fsysTableObject.enableAutoSave" href="#fsysTableObject.enableAutoSave">&#x23;</a>
是否允许自动保存保存文件。  

些设置指定对象回收时是否会自动保存文件，  
也同时指定 fsys.config 对象调用 saveAll 函数时是否自动保存  
其管理的 fsys.table 对象绑定的文件。  

默认情况下 fsys.table 会启用自动保存功能。  
如果多进程或多线程打开相同的配置文件，  
应当禁用自动保存，以避免后退出的线程或进程自动保存更旧的配置。  
fsys.config 的成员也是 fsys.table 对象，也要注意这个问题。  

一旦禁用自动保存，要切记每次修改配置后要及时保存文件。  
在每次打开设置界面时也建议重新调用 load 方法。  
如果要在一个线程修改文件时多线程多进程立即同步，  
则要考虑使用 thread.command 或者 process.command 订阅事件。

### fsysTableObject.load() <a id="fsysTableObject.load" href="#fsysTableObject.load">&#x23;</a>
从文件载入`文件同步表`。  
加载成功返回对象,加载失败返回null空值  

[返回对象:fsysTableObject](#fsysTableObject)

### fsysTableObject.mix() <a id="fsysTableObject.mix" href="#fsysTableObject.mix">&#x23;</a>
[返回对象:fsysTableObject](#fsysTableObject)

### fsysTableObject.mix(混入默认值表) <a id="fsysTableObject.mix" href="#fsysTableObject.mix">&#x23;</a>

```aardio
fsysTableObject.mix(  
   键名 = 默认值;  
   键名2 = 默认值;  
);//该函数用于设定默认值,但不会修改已存在的值
```

### fsysTableObject.save() <a id="fsysTableObject.save" href="#fsysTableObject.save">&#x23;</a>
存储`文件同步表`到文件  
在线程退出时也会自动调用该函数  

[返回对象:fsysTableObject](#fsysTableObject)
