各実行サイクルで非常に大量になるウィンドウで%TEMP%dirを再帰的に削除する小さなprocを作成しました。 しかし、それは遅く動作するように思われました - 手動で%TEMP%パス内の別のフォルダを手動で選択して削除を実行する方が速かったです。 スレッド/ pthreadを使用して、並行してフォルダを削除する可能性はありますか? または代替ソリューション。 次のコードでヘルプが必要です。Tcl:ディレクトリを再帰的に削除する - スレッドを使用してパフォーマンスを改善する
まあproc DirRecursion {dir args} {
set options(-files) ""
set options(-fileTypesFilter) "ALL"
array set options $args
upvar $options(-files) lf
#Performing action deletion on files for dir $dir ... please be patient as this might take some time
if ![catch { append lf " [glob -directory $dir -type f *]"}] {
} "Found following files to delete in dir $dir"
foreach f [set lf [regsub -all {\\} $lf {/}]] {
catch {file delete -force $f}
}
}
if ![catch { set ld [glob -directory $dir -type d *]}] {
foreach d $ld {
DirRecursion $d -files lf
}
} else {
puts "No directories to delete in dir $dir" debug
}
catch {file delete -force $dir}
}
並行してディレクトリ全体を削除することはこれまでどおり高速になるとは思いません。速度はディスクドライブによって制限されます。 –
'lf'を文字列として扱う代わりに、リストを作成する方が良いでしょう。 'lappend'を使ってください。今のところ、スペースが埋め込まれたファイル名を壊す可能性があります。 'regsub'も必要ありません。 'ファイルの削除はネイティブの名前を扱うことができます。また、次のDirRecursionの呼び出しで上のディレクトリからファイルリストを渡しているようです。 –