Merhaba,
Dün akşam şurada (http://forum.ceviz.net/d-dili/121391-tum-dosyalari-md5lemek-hizli-cozum.html) paylaştığım işe yarar uygulamayı, burada da paylaşmamak olmaz diye düşündüm. Bunu yapmadan önce biraz daha geliştirip (artık dirEntries() sayesinde alt dizinleri özyinelemi olarak tarıyor!) ve önemli bir kaç hatasını giderdim...
/*
* genMD5files.d (v1.2)
*/
import std.stdio, std.conv, std.file, std.md5;
struct container {
char[1024] buffer;
string toString() {
int[] primes = [ 3, 5, 11, 17, 29, 41, 59, 71, 101,
107, 137, 149, 179, 191, 197, 227,
239, 269, 281, 311, 347, 419, 431,
461, 521, 569, 599, 617, 641, 659,
809, 821, 827, 857, 881, 1019 ];
char[][] md5;
foreach(x; primes) {
if(x < buffer.length) {
md5 ~= [ buffer[x..x+1], buffer[x+2..x+3] ];
}
}
return getDigestString(to!string(md5));
}
}
void main(string[] args) {
string path = args.length > 1 ? args[1] : ".";
SpanMode mode = args.length > 2 ? args[2] == "-R" ?
SpanMode.breadth :
SpanMode.depth :
SpanMode.shallow;
foreach(string name; dirEntries(path, mode)){
container t;
if( ! isDir(name) ) {
auto data = File(name, "r");
data.rawRead(t.buffer);
t.writeln(" (", name, ")");
}
}
}
Kullanmak için genMD5files . -R veya sadece bulunduğunuz yerdeki başka bir dizin için genMD5files obj ve ./obj/ dizini altındakiler için ise -R de ekleyebilirsiniz. Aslında **-Mö **de deseniz farketmiyor çünkü recursive olan diğer mode'a geçiyor. Şimdilik bu kadar geliştirme yeter...:)
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]