我在删除文本文件的内容时遇到了一些麻烦。据我所知,由于我们使用的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
这似乎用空格替换所有行,但我不确定这是解决这个问题的正确方法。有人可以给我一些指示吗?我对Tcl还是比较新的。
谢谢!
答案 0 :(得分:5)
如果您已获得至少Tcl 8.5,请以r+
或w+
模式打开文件(可能需要进行实验),然后使用chan truncate
:
chan truncate $f 0
如果您使用的是8.4或之前,则需要执行此操作(并且它仅适用于截断为空):
close [open $thefilename "w"]
(如果文件不存在,w
模式会创建文件,如果文件不存在,则将其截断为空。文件的其余部分可能会也可能不会这样!)
但请注意,这不会重置文件上打开的其他频道认为它们的位置。这可能导致奇怪的效果(例如以大偏移量写入,操作系统用零填充前面的字节),即使没有锁定也是如此。
答案 1 :(得分:2)
close [open $path w]
瞧,一个空文件。如果此文件尚不存在,则会创建该文件。
答案 2 :(得分:1)
一种非常简单的方法是使用空文件覆盖您的文件。例如,创建一个空文件(您可以手动或使用以下TCL代码执行此操作):
set blank_file [open "C:/tmp/blank.txt" "w"]
close $blank_file
然后用空白文件覆盖原始文件,如下所示:
file rename -force "C:/tmp/blank.txt" "C:/John/myFile.txt"
当然,如果其他人抓住了该文件,您可能会遇到权限问题。
答案 3 :(得分:0)
你说文件是用另一个进程专门打开的,但你可以写信给它吗?我认为你有许可问题。你在使用Linux还是Unix? (它似乎是一个Windows系统,但Linux / Unix系统上通常会出现权限问题,这很奇怪,不是吗?!)
如果您能够读取和写入文件,并且您可能没有相应的权限来删除该文件,则不会专门打开该文件。
最好在您知道自己拥有所有权限的文件上测试代码。如果代码有效,您可以专注于目标文件。你也可以谷歌“如何在Tcl中提交操作”。阅读此Manipulating Files With Tcl