2016-08-10 8 views
0

Я хочу найти после кода, который ищет файл hw.exe на моем hdd.TCL поиск конкретного файла по c:/

я нашел этот следующий код:

set files [glob hw.exe] 
    set sofar -1 

    foreach f $files { 
      set size [file size $f] 
      if {$size > $sofar} { 
        set sofar $size 
        set name $f 
        } 
      } 

    puts "Biggest files is $name at $sofar bytes" 

ли кто-нибудь один идея, чтобы исправить это? Или есть функция?

+1

http://stackoverflow.com/questions/11104940/tcl-deep-recursive-file-search-search-for-files-with-c-extension – gavv

ответ

2

fileutil package в Tcllib имеет возможность, которую вы ищете, при условии, что вы написали правильный фильтр. Затем можно найти самый большой файл по возвращенному списку, который должен быть намного меньше, чем список всех файлов на диске!

package require fileutil 

proc filter {name} { 
    return [string match hw.exe $name] 
} 
set hwlist [fileutil::find C:/ filter] 

set sofar -1 
set name "" 
foreach f $hwlist { 
    set size [file size $f] 
    if {$size > $sofar} { 
     set name $f 
     set sofar $size 
    } 
} 
puts "Found $name of size $sofar" 
+0

Эй Донал, спасибо, но я не могу использовать fileutil пакет. Я должен использовать регулярные выражения tcl – ManInTheMiddle

+0

. Использование 'string match' фактически является просто равенством, но при необходимости легко адаптироваться к тому, чтобы быть более гибким. Кроме того, алгоритм поиска максимального размера _given список файлов_ из вопроса в значительной степени хорош, как он получает; максимальные значения требуют линейного сканирования. –

+0

Нет пакета fileutil? Бу! Просто скопируйте код из http://core.tcl.tk/tcllib/artifact/4709390bcbd91507 (он имеет ту же лицензию, что и Tcl). –