ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**文件** **文件** 对象允许你读写磁盘上的二进制数据(或从 Zip 文件、FTP 站点等)。虽然 Microsoft *Scripting.FileSystemObject* 对象允许你读写已经存在的文件,但是它仅支持文本,不支持二进制数据。你也可以使用 **文件** 对象修改文件的属性和时间戳。 你可以使用 **[FSUtil](fsutil.zh.md).OpenFile** 和 **[项](item.zh.md).Open** 方法来获取一个 **文件** 对象。你可以通过以下三种模式之一打开文件: - *读取模式* - 你可以通过 **读** 方法从文件中读取数据。你无法写入文件或修改其属性。 - *写入模式* - 你可以通过 **写** 方法向文件中写数据,还可以修改文件属性。你无法从其中读取数据。 - *修改模式* - 你可以修改文件属性和时间戳,但无法读写数据。 <table> <thead><tr><th> 属性名称</th><th> 返回类型</th><th> 描述 </th></tr></thead><tbody><tr><td> *\<default value\>*</td><td> *字符串*</td><td> 返回文件的完整路径名。 </td></tr><tr><td> error</td><td> *整型*</td><td> 返回一个 Win32 错误代码,该代码指示上次操作是否成功或失败。如果上一个操作成功,这通常为 **0**。 例如,如果你尝试使用 **FSUtil.OpenFile** 以读取模式打开一个不存在的文件,将返回一个有效的 **文件** 对象 - 但文件本身不会被打开。在继续使用 **文件** 对象之前,你可以检查 **error** 是否返回 **0**。 </td></tr><tr><td> path</td><td> *对象:***[路径](path.zh.md)**</td><td> 以 **[路径](path.zh.md)** 对象的形式返回文件的完整路径名。 </td></tr><tr><td> size</td><td> *对象:***[文件大小](filesize.zh.md)**</td><td> 返回一个 **[文件大小](filesize.zh.md)** 对象,表示该文件的字节数。 </td></tr><tr><td> tell</td><td> *对象:***[文件大小](filesize.zh.md)**</td><td> 返回一个 **[文件大小](filesize.zh.md)** 对象,表示该文件中的读写游标的当前位置,以字节为单位。 </td></tr></tbody> </table> <table> <thead><tr><th> 方法名称</th><th> **参数**</th><th> 返回类型</th><th> 描述 </th></tr></thead><tbody><tr><td> 关闭</td><td> *无*</td><td> *无*</td><td> 关闭底层文件句柄。此调用后,**文件** 对象仍然有效,但无法再读写数据。 如果你想使用 **SetAttr** 方法修改你创建的文件的属性,你可能希望首先调用 **关闭**,否则文件系统会根据需要在该文件上设置 *A*(压缩包)属性,无论你是否想设置它。 如果你想删除一个文件,你也可以手动关闭它,因为某些脚本语言(例如 *JScript*)具有惰式垃圾回收,否则可能会比你预期的长时间保持文件句柄打开。 </td></tr><tr><td> 读</td><td> \<<blob:target>\> \<整型:size\></td><td> *整型* 或 *对象:***[Blob](blob.zh.md)**</td><td> 从文件中读取数据。如果你提供一个 *目标* **[Blob](blob.zh.md)** 作为第一个参数,数据将存储在该 **Blob** 中。否则,将自动创建一个 **Blob**。 可选的 *size* 参数指定要读取的字节数 - 默认行为是读取文件的剩余内容。 每次调用最多可以读取 1 GB (1073741824 字节),无论是否指定了大小。若要读取更大的文件,你必须多次调用 **读**。 如果你提供一个 **Blob**,则返回值表示从文件中成功读取的字节数。如果没有提供 **Blob**,则返回值是自动创建的 **Blob** - 你可以使用它的 **size** 属性来发现读取的字节数。 如果 **读** 返回零(或一个空 **Blob**),你可以使用 **error** 属性来测试是否有任何问题,或文件是否只是没有更多数据。 </td></tr><tr><td> 搜索</td><td> \<整型:delta\> \<字符串:method\></td><td> *对象:***[文件大小](filesize.zh.md)**</td><td> 移动此文件中的读写游标。*delta* 参数指定要移动多少字节 - 如何解释这取决于可选的 *method* 参数: *b* - 相对于文件开头移动 *e* - 相对于文件末尾移动 *c* - 相对于当前位置移动(这是默认方法) 返回值是表示新的游标位置的 **[文件大小](filesize.zh.md)** 对象。 </td></tr><tr><td> SetAttr</td><td> *对象:***[文件属性](fileattr.zh.md)** or \<字符串:attributes\></td><td> *布尔*</td><td> 修改此文件的属性。你可以传递一个表示要设置的属性的字符串,或一个 **[文件属性](fileattr.zh.md)** 对象。使用字符串时,有效属性为: *a* - 压缩包 *c* - 压缩 *e* - 加密 *h* - 隐藏 *n* - 正常 *r* - 只读 *s* - 系统 p - 固定 i - 非内容索引 请注意,*c* 和 *e* 属性不能同时设置。 当你传递一个字符串时,你还可以使用 **+** 和 **-** 来打开或关闭某些属性,而不会影响其它属性。例如,**SetAttr("-r")** 将关闭只读属性。 如果操作成功,返回值为 **真**。 </td></tr><tr><td> SetTime</td><td> \<日期:modify\> \<日期:create\> \<日期:access\></td><td> *布尔*</td><td> 修改一个或多个文件的时间戳。*create* 和 *access* 参数是可选的。如果你希望对时间戳不进行任何更改,请指定 **0**。 时间戳指定为本地时间 - 使用 **SetTimeUTC** 将它们指定为 UTC。 成功时返回值为 **真**。 </td></tr><tr><td> SetTimeUTC</td><td> \<日期:modify\> \<日期:create\> \<日期:access\></td><td> *布尔*</td><td> 修改一个或多个文件的时间戳。*create* 和 *access* 参数是可选的。如果你希望对时间戳不进行任何更改,请指定 **0**。 时间戳指定为 UTC 时间 - 使用 **SetTime** 将它们指定为本地时间。 成功时返回值为 **真**。 </td></tr><tr><td> 截断</td><td> *无*</td><td> *布尔*</td><td> 在写游标当前位置截断文件。你可以将其与 **搜索** 方法结合使用,在磁盘上预分配文件空间,以获得更高的性能(即搜索到文件的最终大小,在此处截断,然后搜索回到开头并写入数据)。 如果操作成功,返回值为 **真**。 </td></tr><tr><td> 写</td><td> \<<blob:source>\> or \<字符串:source\> \<整型:from\> \<整型:size\></td><td> 整型</td><td> 将指定 **Blob**(或数组)或 *字符串* 中的数据写入文件。 默认情况下,将写入 **Blob** 的全部内容,但是你可以使用可选的 *from* 参数指定源字节偏移量,并使用 *size* 参数指定要写入的字节数。 每次调用最多可以写入 1 GB (1073741824 字节),无论是否指定了大小。若要写入更多数据,你必须多次调用 **写**。 如果你提供的是 *字符串* 而不是 Blob,则该字符串将被自动编码为 UTF-8。 [内容](content.zh.md) 返回值表示成功写入到文件中的字节数。如果 **Write** 返回零,可以使用 **error** 属性测试是否出错,或仅缺少数据要写入(例如,指定的 **Blob** 为空)。</td></tr></tbody> </table>