前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用%File对象

使用%File对象

作者头像
用户7741497
发布2022-07-06 09:36:06
5760
发布2022-07-06 09:36:06
举报
文章被收录于专栏:hml_知识记录

如果想要操作文件本身,需要使用%Library.File%New()方法实例化%File对象。该类还提供了允许使用该文件的实例方法。

注意:本节提供了几个使用%File对象的示例,以供说明。

对于简单的文件读写,使用%Stream.FileCharacter和%Stream.FileBinary。因为它们提供了额外的功能,例如,以正确的模式自动打开文件。

创建%File对象的实例

要使用文件,需要使用%New()方法实例化表示该文件的%File对象。该文件可能已经存在,也可能不存在于磁盘上。

以下示例在默认目录中为文件export.xml实例化一个%File对象。

代码语言:javascript
复制
set fileObj = ##class(%File).%New("export.xml")

打开和关闭文件

实例化%File对象后,需要使用open()方法打开文件,以读取或写入该文件:

代码语言:javascript
复制
USER>set status = fileObj.Open()

USER>write status
1

使用Close()方法关闭文件:

代码语言:javascript
复制
USER>do fileObj.Close()

检查%File对象的属性

一旦实例化了文件,就可以直接检查文件的属性。

代码语言:javascript
复制
USER>write fileObj.Name
export.xml
USER>write fileObj.Size
2512
USER>write $zdate(fileObj.DateCreated)
11/18/2020
USER>write $zdate(fileObj.DateModified)
11/18/2020
USER>write fileObj.LastModified
2020-11-18 14:24:38
USER>write fileObj.IsOpen
0

请注意,LastModified是人类可读的时间戳,而不是$H格式的日期。

属性“大小Size”、“创建日期DateCreated”、“修改日期DateModified”和“最后修改日期LastModified”是在访问时计算的。为不存在的文件访问这些属性会返回-2,表示找不到该文件。

注意:Windows是目前唯一跟踪实际创建日期的平台。其他平台存储最后一次文件状态更改的日期。

代码语言:javascript
复制
USER>write ##class(%File).Exists("foo.xml")
0
USER>set fooObj = ##class(%File).%New("foo.xml")
 
USER>write fooObj.Size
-2

如果文件已打开,可以通过访问CanonicalName属性来查看其规范名称,这是根目录的完整路径。

代码语言:javascript
复制
USER>write fileObj.CanonicalName
 
USER>set status = fileObj.Open()
 
USER>write fileObj.IsOpen
1
USER>write fileObj.CanonicalName
c:\intersystems\IRIS\mgr\user\export.xml

从文件中读取

要读取文件,可以打开文件,然后使用Read()方法。

以下示例读取messages.log的前200个字符。

代码语言:javascript
复制
USER>set messages = ##class(%File).%New(##class(%File).ManagerDirectory() _ "messages.log")
 
USER>set status =  messages.Open("RU")
 
USER>write status
1
USER>set text = messages.Read(200, .sc)

USER>write text
 
 
 
*** Recovery started at Mon Dec 09 16:42:01 2019
     Current default directory: c:\intersystems\IRIS\mgr
     Log file directory: .\
     WIJ file spec: c:\intersystems\IRIS\mgr\IR
USER>write sc
1
USER>do messages.Close() 

要从文件中读取整行,请使用ReadLine()方法,该方法继承自%Library.File的父类%Library.AbstractStream

下面的示例读取E:\temp\new.txt的第一行。

代码语言:javascript
复制
/// desc: 读取数据
/// w ##class(Demo.FileDemo).ReadFileData("E:\temp\new.txt")
ClassMethod ReadFileData(str)
{
    s fileObj  = ##class(%File).%New(str)
    s status =  fileObj.Open("RU")
    w status,!
    s text = fileObj.ReadLine(,.sc)
    w text,!
    w sc,!
    d fileObj.Close()
    
    q ""
}

写入文件

要写入文件,可以打开文件,然后使用Write()WriteLine()方法。

以下示例将一行文本写入新文件。

代码语言:javascript
复制
/// desc: 写入数据
/// w ##class(Demo.FileDemo).WriteFileData("E:\temp\new.txt")
ClassMethod WriteFileData(str)
{
    s fileObj = ##class(%File).%New(str)
    s status = fileObj.Open("RUWSN")
    w status,!
    s status = fileObj.WriteLine("Writing to a new file.")
    w status,!
    w fileObj.Size,!
    d fileObj.Rewind()
    s text = fileObj.ReadLine(,.sc)
    w text,!
    q ""
}

倒回文件

从文件读取或写入文件后,希望使用Rewind()方法倒回文件,以便可以从文件开头执行操作。

从上一个示例停止的地方开始,fileObj现在位于其末尾。倒回文件并再次使用WriteLine()会覆盖该文件。

代码语言:javascript
复制
USER>set status = fileObj.Rewind()

USER>write status
1
USER>set status = fileObj.WriteLine("Rewriting the file from the beginning.")
 
USER>write status
1
USER>write fileObj.Size
40

关闭文件并重新打开它也会倒回文件。

代码语言:javascript
复制
USER>do fileObj.Close()
 
USER>set status = fileObj.Open("RU")
 
USER>write status
1
USER>set text = fileObj.ReadLine(,.sc)
 
USER>write sc
1
USER>write text
Rewriting the file from the beginning.

清除文件

要清除文件,可以打开文件,然后使用Clear()方法。这将从文件系统中删除该文件。

以下示例清除默认目录中的junk.xml

代码语言:javascript
复制
USER>write ##class(%File).Exists("junk.xml")
1
USER>set fileObj = ##class(%File).%New("junk.xml")

USER>set status = fileObj.Open()

USER>write status
1
USER>set status = fileObj.Clear()
 
USER>write status
1
USER>write ##class(%File).Exists("junk.xml")
0

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建%File对象的实例
  • 打开和关闭文件
  • 检查%File对象的属性
  • 从文件中读取
  • 写入文件
  • 倒回文件
  • 清除文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档