2012-09-10 107 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)。 –