0

我在删除文本文件的内容时遇到了一些麻烦。据我所知,由于我们使用的 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

4 回答 4

6

如果您至少有 Tcl 8.5,请以r+w+模式打开文件(可能需要进行实验),然后使用chan truncate

chan truncate $f 0

如果您使用的是 8.4 或更早版本,则必须这样做(它仅适用于截断为空):

close [open $thefilename "w"]

w如果文件不存在,该模式会创建文件,如果存在,则在打开时将其截断为空。程序的其余部分可能会也可能不会喜欢这样!)

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

于 2012-09-11T19:45:30.787 回答
2
close [open $path w]

瞧,一个空文件。如果此文件尚不存在,则会创建它。

于 2012-09-11T14:17:11.007 回答
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"

当然,如果其他东西抓取了文件,您可能会遇到权限问题。

于 2012-09-11T10:56:14.600 回答
0

您说该文件是由另一个进程专门打开的,但您可以写入它?!我认为你有权限问题。您使用的是 Linux 还是 Unix?!(貌似是windows系统,但是linux/unix系统通常会出现权限问题,很奇怪吧?!)

如果您能够读取和写入文件,则该文件不会以独占方式打开,并且您可能没有适当的权限来删除该文件。

此外,最好在您知道您拥有所有权限的文件上测试代码。如果代码正常工作,您可以专注于您的目标文件。你也可以谷歌“如何在 Tcl 中归档操作”。阅读这篇使用 Tcl 操作文件

于 2012-09-10T22:39:19.163 回答