在TCL中同时写入时有什么方法可以读取吗?
我尝试使用 w +所以它没有用。
set f0 [open out11.tr w+]
所以我想同时阅读已经写完的每一行
在TCL中同时写入时有什么方法可以读取吗?
我尝试使用 w +所以它没有用。
set f0 [open out11.tr w+]
所以我想同时阅读已经写完的每一行
以下示例使用 w+ 打开一个文件(表示读/写,但如果文件已存在则截断内容)。然后它写入每一行,然后读回,写,然后读回,......
set lines {
{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi}
{accumsan est ut ante ornare et porta sem iaculis. Fusce a dolor}
{magna, eget viverra quam. In sem justo, hendrerit a porttitor sit}
{amet, scelerisque eu turpis. Nulla arcu arcu, condimentum vel}
{fermentum sit amet, vulputate et sapien. Aenean convallis, purus vel}
{molestie vehicula, diam eros adipiscing nibh, in dapibus nisi orci}
{ut nisl. Ut fermentum felis a lectus lacinia dapibus. Nunc cursus}
{nunc vitae massa fermentum imperdiet. In eu lectus quis arcu}
{convallis imperdiet in quis tortor.}
}
set f [open out.txt w+]
set lastRead 0
foreach line $lines {
# Write to the file
puts $f $line
# Read it back and display to stdout
seek $f $lastRead
gets $f line2
set lastRead [tell $f]
}
close $f
虽然该w+
模式可以工作,但它会在您打开文件时截断文件(因为它是对w
执行相同操作的模式的修改)。如果您不想擦除现有数据,请r+
改用(在这种情况下,文件必须首先存在)。
当你想创建不存在的文件,能够通过同一个通道读写它,并且不想在打开时截断它,你必须使用另一种形式的模式描述符(派生自POSIX 描述符,如果您对助记符感兴趣):
set f0 [open out11.tr {RDWR CREAT}]
(w+
是RDWR CREAT TRUNC
,r+
是简单的RDWR
。)