在Tcl中删除文件的内容

时间:2012-09-10 22:34:07

标签: file file-io permissions 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

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

谢谢!

4 个答案:

答案 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