在Tcl中删除文件的内容

Kev*_*vin 0 permissions file-io file tcl

我在删除文本文件的内容时遇到了一些麻烦.据我所知,由于我们使用的PLM软件的权限问题,我似乎无法重命名或删除此文件并创建一个具有相同名称的新文件.不幸的是,我独自一人,因为似乎没有人知道到底出了什么问题.

但是,我可以读写这个文件.所以我一直在寻找seek命令并做这样的事情:

set f [open "C:/John/myFile.txt" "a+"]

seek $f 0   
set fp [tell $f]

seek $f 0 end
set end [tell $f]

# Restore current file pointer
seek $f $fp

while { $fp < $end } {
    puts -nonewline $f " "
    incr fp
}

close $f
Run Code Online (Sandbox Code Playgroud)

这似乎用空格替换所有行,但我不确定这是解决这个问题的正确方法.有人可以给我一些指示吗?我还是比较新的Tcl.

谢谢!

Don*_*ows 5

如果你至少得到了Tcl 8.5,请打开文件r+w+模式(可能需要实验),然后使用chan truncate:

chan truncate $f 0
Run Code Online (Sandbox Code Playgroud)

如果您使用的是8.4或之前,则需要执行此操作(并且它仅适用于截断为空):

close [open $thefilename "w"]
Run Code Online (Sandbox Code Playgroud)

(w如果文件不存在,则模式创建文件,如果文件不存在则将其截断为空.文件的其余部分可能会也可能不会这样!)

但请注意,这不会重置文件上打开的其他通道认为它们的位置.即使没有锁定,这也可能导致奇怪的效果(例如以大偏移量写入,操作系统用零填充前面的字节).