Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19911702
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类:

2011-03-21 10:26:45

30             文件访问101

#承接软件自动化实施与培训等gtalk: ouyangchongwu#gmail.com qq 37391319
#python qq group: 深圳自动化测试python群:113938272
#武冈深圳qq群:66250781

TCL提供几种读写文件的方法,最简单的方法是使用getsputs。数据量大的时候,使

read加载文件,在使用split解析更有效。

这些方法还可以用于socket和管道上的通信,还可以用于存储内存中的虚拟文件系统。

 

   下面介绍上述过程中用到的几个基本的文件输入输出命令。

 

   open fileName ?access? ?permission?

   open命令 access方式打开文件name。返回供其他命令(gets,close)使用

的文件标识。如果name的第一个字符是“|”,管道命令被触发,而不是打开文件。

   文件的打开方式和我们熟悉的C语言类似,有以下方式:

   r     只读方式打开。文件必须已经存在。这是默认方式。

   r+    读写方式打开,文件必须已经存在。   

   w     只写方式打开文件,如果文件存在则清空文件内容,否则创建一新的空文件。

   w+    读写方式打开文件,如文件存在则清空文件内容,否则创建新的空文件。

   a     只写方式打开文件,文件必须存在,并把指针指向文件尾。

   a+    读写方式打开文件,并把指针指向文件尾。如文件不存在,创建新的空文件。

   open命令返回一个字符串用于表识打开的文件。当调用别的命令(如:gets,puts,close,〕对打开的文件进行操作时,就可以使用这个文件标识符。TCL有三个特定的文件标识: stdin,stdoutstderr ,分别对应标准输入、标准输出和错误通道,任何时候你都可以使用这三个文件标识。

  

   gets   fileId   ?varName?      fileId标识的文件的下一行,忽略换行符。如果命令中有varName就把该行赋给它,并返回该行的字符数(文件尾返回-1),如果没有varName参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)。

  

   gets类似的命令是read,不过read不是以行为单位的,它有两种形式:

   read ?-nonewline?  fileId     读并返回fileId标识的文件中所有剩下的字节。如果没有nonewline开关,则在换行符处停止。

   read   fileId  numBytes     fileId标识的文件中读并返回下一个numbytes字节。

  

   puts  ?-nonewline?  ?fileId? string       puts命令把string写到fileId中,如果没有nonewline开关的话,添加换行符。fileId默认是stdout。命令返回值为一空字符串。可能的输出对象有:

The value returned by a previous call to open with write access.

stdout

stderr

 

  

   puts命令使用C的标准I/O库的缓冲区方案,这就意味着使用puts产生的信息不会立即出现在目标文件中。如果你想使数据立即出现在文件中,那你就调用flush命令:

   flush    fileId        把缓冲区内容写到fileId标识的文件中,命令返回值为空字符串。

   flush命令迫使缓冲区数据写到文件中。flush直到数据被写完才返回。当文件关闭时缓冲区数据会自动flush

  

   close ?fileId?       关闭标识为fileId的文件,命令返回值为一空字符串。

  

   这里特别说明的一点是,TCL中对串口、管道、socket等的操作和对文件的操作类似,以上对文件的操作命令同样适用于它们。

 

可以使用seek命令来改变文件的访问点:

seek  fileId  offset    ?origin?          fileId标识的文件的访问点设置为相对于origin偏移量为offset的位置。origin可以是startcurrentend,默认是start。命令的返回值是一空字符串。

例如:seek  fileId   2000    改变fieleId标识的文件访问点,以便下次读写开始于文件的第2000个字节。

seek的第三个参数说明偏移量从哪开始计算。第三个参数必为start,currentend中的一个。start是默认值:即偏移量是相对文件开始处计算。current是偏移量从当前访问位置计算。end是偏移量从文件尾开始计算。

如果文件以"a"模式打开,当前位置不能设置为文件中间,但是读可以设置为文件开始处。

 

tell  fileId      返回fileId标识的文件的当前访问位置。返回值为10进制字符串。

eof  fileId     如果到达fileId标识的文件的末尾返回1,否则返回0

 

再总结一下TCL文件访问的注意点:

1, 程序正常退出,文件会关闭并且flush;异常退出会关闭,但是未必会flush

2, 打开文件的数量是有限的,不使用时要尽快关闭

3, 使用eof或者gets

阅读(7476) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~