2012-09-10 676 views
0

我有一些麻烦删除文本文件的内容。从我所知道的情况来看,由于我们使用的PLM软件的权限问题,我似乎无法重命名或删除此文件并创建一个具有相同名称的新文件。不幸的是,我自己在这里,因为似乎没有人知道究竟是什么错误。在Tcl中删除文件的内容

但是,我可以读写这个文件。所以我一直在寻找的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

你说这个文件是专门用另一个进程打开的,但你可以写入它?!我认为你有权限问题。你使用的是Linux还是Unix? (它似乎是Windows系统,但许可问题通常发生在Linux/Unix系统上,这很奇怪,不是吗?)

如果您能够读取和写入文件,则文件并非完全打开并且您可能没有适当的权限来删除该文件。

此外,最好测试一个文件上的代码,你知道你有它的所有权限。如果代码正在工作,您可以专注于目标文件。你也可以谷歌'如何在Tcl文件操作'。阅读本文Manipulating Files With Tcl

+0

好的,我现在看到我的措辞不清楚。该文件是用另一个进程打开的,但读取和写入文件的Tcl脚本也在同一进程中。这只是我只能读写,而不能重命名或删除。整个“权限被拒绝”是我在尝试重命名或删除此过程中的文件时所得到的错误消息。 – Kevin

+0

因此,如果您处于完全打开文件的同一进程中,则应该没有问题。你只需要知道如何操作Tcl中的文件。 –

+0

是否要删除或重命名文件?或者你想读取和写入文件?!文件保持打开状态,因为处理程序已分配给该文件,并且您的应用程序正在处理它。当应用程序释放处理程序时,文件将被释放并关闭。 –

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" 

中当然,如果别的东西抓取了文件,你可能会遇到权限问题。

2
close [open $path w] 

瞧,一个空文件。如果这个文件还不存在,它将被创建。

5

如果你有至少8.5的Tcl在r+w+模式打开文件(可能需要试验),然后使用chan truncate:如果你之前使用8.4或

chan truncate $f 0 

,你而不是有这样做(和它仅适用于截断为空):

close [open $thefilename "w"] 

(该w模式创建文件,如果它不存在,并截断它开放空,如果它没有休息。的程序可能或可能不喜欢这个!)

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

+0

另外,在做这类事情时应避免使用'a'和'a +'模式;那些与它们有一些特殊的语义相关联,并不能很好地与截断相结合。 (特别是在Windows中,在这个区域中非常非POSIX)。 –