0

テキスト ファイルの内容を削除するのに問題があります。私が知る限り、使用している PLM ソフトウェアの権限の問題により、このファイルの名前を変更したり削除したりして、同じ名前で新しいファイルを作成することはできないようです。残念ながら、私はここで独力です。正確に何が間違っているのか誰も知らないようです。

ただし、このファイルの読み書きはできます。だから私はシークコマンドを見て、次のようなことをしてきました:

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モードは、ファイルが存在しない場合はファイルを作成し、存在する場合は開いたときに空に切り詰めます。プログラムの残りの部分は、これを好む場合と好まない場合があります!)

ただし、これは、ファイル上で開いている他のチャネルがどこにあると考えているかをリセットしないことに注意してください。これにより、ロックしなくても奇妙な結果 (大きなオフセットでの書き込み、OS が前のバイトをゼロで埋めるなど) が発生する可能性があります。

于 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 で操作をファイルする方法」について Google で検索することもできます。このTcl を使用したファイルの操作をお読みください

于 2012-09-10T22:39:19.163 に答える