# fsys.stream 库模块帮助文档

## fsys 成员列表 <a id="fsys" href="#fsys">&#x23;</a>

### fsys.stream <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
文件流对象  
兼容IStream,ISequentialStream接口

创建文件流对象,返回对象可传入其他线程使用。

### fsys.stream("文件路径","a") <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
只写追加模式打开文件流,创建新文件保留原文件

### fsys.stream("文件路径","a+") <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
读写追加模式打开文件流,创建新文件保留原文件  
注意流对象总是以二进制模式读写，不需要添加b标记

### fsys.stream("文件路径","r+") <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
读写模式打开文件流,文件必须存在  
注意流对象总是以二进制模式读写，不需要添加b标记

### fsys.stream("文件路径","w") <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
只写模式打开文件流,创建新文件清空原文件  
注意流对象总是以二进制模式读写，不需要添加b标记

### fsys.stream("文件路径","w+") <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
读写模式打开文件流,创建新文件清空原文件  
注意流对象总是以二进制模式读写，不需要添加b标记

### fsys.stream() <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
[返回对象:fsysStreamObject](#fsysStreamObject)

### fsys.stream(IStream接口指针) <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
直接使用指针创建对象

### fsys.stream(IStream接口指针,true) <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
直接使用指针创建对象,该指针的COM引用计数减一  
注意对象自身会增加COM引用计数并在释放时移除

### fsys.stream(初始化数据,缓冲区长度) <a id="fsys.stream" href="#fsys.stream">&#x23;</a>
创建内存流文件,所有参数可选  
可选使用参数@3指定选项,此参数请参考库源码

## fsysStreamObject 成员列表 <a id="fsysStreamObject" href="#fsysStreamObject">&#x23;</a>

### fsysStreamObject.close() <a id="fsysStreamObject.close" href="#fsysStreamObject.close">&#x23;</a>
关闭对象

### fsysStreamObject.commit(flags) <a id="fsysStreamObject.commit" href="#fsysStreamObject.commit">&#x23;</a>
提交更改

### fsysStreamObject.flush() <a id="fsysStreamObject.flush" href="#fsysStreamObject.flush">&#x23;</a>
提交更改  
兼容aardio标准流接口

### fsysStreamObject.lines() <a id="fsysStreamObject.lines" href="#fsysStreamObject.lines">&#x23;</a>

```aardio
for line in fsysStreamObject.lines(){
	/*逐行读取数据，循环返回当前行（字符串值）。  
无论是否以文本模式打开，读取数据总是移除回车符与换行符。*/	
}
```

### fsysStreamObject.lockPointer() <a id="fsysStreamObject.lockPointer" href="#fsysStreamObject.lockPointer">&#x23;</a>
如果这是一个内存流,  
锁定内存并返回内存指针，内存长度,  
需要使用对象的unlockPointer()成员函数解锁内存  
写入内存流可能导致重新分配内存,所以返回的指针可能会变动

### fsysStreamObject.read <a id="fsysStreamObject.read" href="#fsysStreamObject.read">&#x23;</a>
读数据

### fsysStreamObject.read(-1) <a id="fsysStreamObject.read" href="#fsysStreamObject.read">&#x23;</a>
参数指定读取长度,-1为读到尾部  
参数也可以指定一个结构体用于填充读取的数据,  
无参数读取一行

### fsysStreamObject.read(0) <a id="fsysStreamObject.read" href="#fsysStreamObject.read">&#x23;</a>
是否未到达文件尾。  
如果已经到达文件尾返回 null，否则返回空字符串。  
注意在布尔表达式工 null 等于 false，空字符串等于 true。

### fsysStreamObject.readAll() <a id="fsysStreamObject.readAll" href="#fsysStreamObject.readAll">&#x23;</a>
移到指针到文件头  
读取到文件尾返回所有数据

### fsysStreamObject.readBuffer(buffer,读取长度) <a id="fsysStreamObject.readBuffer" href="#fsysStreamObject.readBuffer">&#x23;</a>
读取数据到 buffer,  
参数@1应是 buffer 对象或指针，  
参数@2省略则默认为缓冲区长度。  
成功返回读取长度

### fsysStreamObject.readTo <a id="fsysStreamObject.readTo" href="#fsysStreamObject.readTo">&#x23;</a>
读取直到以指定的字符串结束

### fsysStreamObject.readTo('结束串') <a id="fsysStreamObject.readTo" href="#fsysStreamObject.readTo">&#x23;</a>
读取直到以指定的字符串结束,返回值不包含结束串,  
该函数每次仅读取一个字节,效率较低

### fsysStreamObject.reset() <a id="fsysStreamObject.reset" href="#fsysStreamObject.reset">&#x23;</a>
文件指针移动到开始  
类似seek(0,"set"),不同的是此函数返回对象自身  

[返回对象:fsysStreamObject](#fsysStreamObject)

### fsysStreamObject.revert() <a id="fsysStreamObject.revert" href="#fsysStreamObject.revert">&#x23;</a>
撤消更改

### fsysStreamObject.seek("cur",) <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
移动至相对当前位置的指定偏移量

### fsysStreamObject.seek("end") <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
移动指针至结束处

### fsysStreamObject.seek("end",) <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
移动至相对结束处的指定偏移量

### fsysStreamObject.seek("set") <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
移动指针到开始

### fsysStreamObject.seek("set",) <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
移动至相对开始处的指定偏移量

### fsysStreamObject.seek() <a id="fsysStreamObject.seek" href="#fsysStreamObject.seek">&#x23;</a>
得到当前位置

### fsysStreamObject.size() <a id="fsysStreamObject.size" href="#fsysStreamObject.size">&#x23;</a>
得到数据长度

### fsysStreamObject.stat() <a id="fsysStreamObject.stat" href="#fsysStreamObject.stat">&#x23;</a>
返回流状态  
返回值为STATSTG结构体  

[返回对象:fsysstramSTATSTGObject](#fsysstramSTATSTGObject)

### fsysStreamObject.unlockPointer() <a id="fsysStreamObject.unlockPointer" href="#fsysStreamObject.unlockPointer">&#x23;</a>
解锁内存  
用lockPointer函数获取内存指针使用以后，必须调用此函数

### fsysStreamObject.write <a id="fsysStreamObject.write" href="#fsysStreamObject.write">&#x23;</a>
写数据

### fsysStreamObject.write(数据,长度) <a id="fsysStreamObject.write" href="#fsysStreamObject.write">&#x23;</a>
写入数据  
参数@1可使用字符串、buffer、指针、结构体等  
如果指定指针就必须明确指定写入长度

### fsysStreamObject.writeBuffer(buffer,读取长度) <a id="fsysStreamObject.writeBuffer" href="#fsysStreamObject.writeBuffer">&#x23;</a>
buffer 写入流,  
参数@1应是 buffer 对象或指针，  
参数@2省略则默认为缓冲区长度

## fsysstramSTATSTGObject 成员列表 <a id="fsysstramSTATSTGObject" href="#fsysstramSTATSTGObject">&#x23;</a>

### fsysstramSTATSTGObject.cbSize <a id="fsysstramSTATSTGObject.cbSize" href="#fsysstramSTATSTGObject.cbSize">&#x23;</a>
文件长度
