2012-07-29 33 views
0

有没有什么方法可以读取,同时在TCL
我试图用w + 所以,它没有工作。读写tcl

set f0 [open out11.tr w+] 

所以我想读每一个已经完成在同一时间书写线

+0

您的问题不清楚:您是否想写1到一个文件,一次写一行,然后2)读你刚刚写的行吗? – 2012-07-29 21:19:33

+0

你对这个'multithreading'标签绝对正面吗?你是否需要从多个操作系统线程同时访问一个文件,或者只是关于交织读/写(即关于文件位置管理)? – kostix 2012-07-30 20:41:39

回答

1

虽然w+模式将工作,但它截断该文件,当你打开它(因为它的修改w模式,它做同样的事情)。如果您不想擦除现有数据,请改为使用r+(在这种情况下,文件必须先存在)。

当你想创建文件如果它不存在,能够通过相同的通道读取和写入,并且不想在打开时截断它,你必须使用其他表单模式描述符(来自POSIX描述得出,如果你有兴趣在助记符):

set f0 [open out11.tr {RDWR CREAT}] 

w+RDWR CREAT TRUNCr+是平原RDWR。)

1

下面的示例打开一个文件以w +(手段读/写,但截断c内容如果文件已经存在)。然后它写入每一行,然后回读,写入,然后回读...

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