2012-07-29 57 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