我有以下代码 -
set fh [open /home/user/file1 a+]
for { set i 0 } {i < 3600 } { incr i } {
puts $fh "This is the $i line"
}
# If I open the file before closing the file handler, the file is empty. How do I
# access it here?
close $fh
答案 0 :(得分:1)
是的,您可以从文件中读取和写入,但必须将其打开才能进行读/写访问。使用a +标志打开文件不允许从文件中读取:
a + ...打开文件进行写作。该文件不存在,创建它。 将当前位置设置为文件末尾。
您想要做的是以r +模式打开文件(如果存在),或者如果它不存在,则以w +模式打开。这将允许您对文件使用读取操作。
在TCL here.
中查看有关文件访问模式的更多信息答案 1 :(得分:1)
The a+
mode打开以进行读取和写入(必要时创建文件),但文件中的初始位置在最后,以便您可以向其追加数据(这是a
代表)。要阅读任何有用的内容,您必须seek
到最后的某个地方。
seek $fh 0
set firstLine [gets $fh]
请注意,这与r+
模式相反,后者将初始位置设置为文件的 start ,而w+
模式则截断文件在开放。 (为了完整起见,还有r
是只读的,w
是只写的,a
是仅附加的,并设置一个特殊的OS标志严格地在支持这种语义的平台上强制执行。)
答案 2 :(得分:1)
我做了以下工作并且工作正常。
设置fh [open /tmp/test.csv a +] fconfigure $ fh -buffering line
这会逐行吐出到文件中。因此,在执行脚本的任何给定时间点,我都可以打开CSV文件并查看数据。其他选项包括以下内容 -
tcl> set fh [open test a+]
file13
tcl> fconfigure $fh -buffering none
tcl> puts $fh "line 1"
tcl> puts $fh "line 2"
tcl> puts $fh "line 3"
[vm@ testserver]$ more test
line 1
line 2
line 3
tcl> fconfigure $fh -buffering full
tcl> puts $fh "line 4"
tcl> puts $fh "line 5"
tcl> puts $fh "line 6"
[vm@ testserver]$ more test
line 1
line 2
line 3
tcl> fconfigure $fh -buffering line
tcl> puts $fh "line 7"
tcl> puts $fh "line 8"
tcl> puts $fh "line 9"
[vm@ testserver]$ more test
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
[vm@ test]$
谢谢Kenneth Aalberg和Donal Fellows。
欣赏超快反应!