Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Klasör Dosya Değişim Kontrolü
#1
Merhaba,

Bir problem için en iyi yöntemi bulmak adına fikirlerinize başvurmak istiyorum.

Problem : Bir klasör içerisinde dizin, alt dizin ve dosyalar mevcut. Herhangi bir dosya değişirse yeni dosya eklenirse silinirse gibi bir işlem kontrolünü yapmak istiyorum.
Bulduğum Çözüm : Bütün dosyalar tarayarak tümüne tek bir md5 hash oluşturuyorum. Son oluşturduğum ile yeni oluşan md5 kıyaslayarak karşılaştırıyorum. Fakat bu işlem 3gb yaklaşık 6000 dosya için yaklaşık 15sn. sürüyor. 

Araştırmam sonucu win api ile anlık notify alabiliyorum. Fakat anlık beni çözmüyor 1 hafta kapalı da olabilir PC vb.

Bu işi daha hızlı yapmak için önerilerinize hazırım git tarzı uygulamalar bu işi nasıl yapıyor.
İyi günler.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#2
(28-02-2021, Saat: 00:07)narkotik Adlı Kullanıcıdan Alıntı: Merhaba,

Bir problem için en iyi yöntemi bulmak adına fikirlerinize başvurmak istiyorum.

Problem : Bir klasör içerisinde dizin, alt dizin ve dosyalar mevcut. Herhangi bir dosya değişirse yeni dosya eklenirse silinirse gibi bir işlem kontrolünü yapmak istiyorum.
Bulduğum Çözüm : Bütün dosyalar tarayarak tümüne tek bir md5 hash oluşturuyorum. Son oluşturduğum ile yeni oluşan md5 kıyaslayarak karşılaştırıyorum. Fakat bu işlem 3gb yaklaşık 6000 dosya için yaklaşık 15sn. sürüyor. 

Araştırmam sonucu win api ile anlık notify alabiliyorum. Fakat anlık beni çözmüyor 1 hafta kapalı da olabilir PC vb.

Bu işi daha hızlı yapmak için önerilerinize hazırım git tarzı uygulamalar bu işi nasıl yapıyor.
İyi günler.

merhaba hash kontrolü yaptırmak dosyanın tamamının diskden okunmasını sağlayacağı için söylediğiniz gibi uzun zaman alacakdır, bunun yerine dosyanın create modify zamanlarını bir yere kayıt edip karşılaştırırsanız, yada bu gibi değerlerden hash çıkarırsanız daha hızlı olacakdır.
Cevapla
#3
(28-02-2021, Saat: 00:16)hayalyilmaz43 Adlı Kullanıcıdan Alıntı:
(28-02-2021, Saat: 00:07)narkotik Adlı Kullanıcıdan Alıntı: Merhaba,

Bir problem için en iyi yöntemi bulmak adına fikirlerinize başvurmak istiyorum.

Problem : Bir klasör içerisinde dizin, alt dizin ve dosyalar mevcut. Herhangi bir dosya değişirse yeni dosya eklenirse silinirse gibi bir işlem kontrolünü yapmak istiyorum.
Bulduğum Çözüm : Bütün dosyalar tarayarak tümüne tek bir md5 hash oluşturuyorum. Son oluşturduğum ile yeni oluşan md5 kıyaslayarak karşılaştırıyorum. Fakat bu işlem 3gb yaklaşık 6000 dosya için yaklaşık 15sn. sürüyor. 

Araştırmam sonucu win api ile anlık notify alabiliyorum. Fakat anlık beni çözmüyor 1 hafta kapalı da olabilir PC vb.

Bu işi daha hızlı yapmak için önerilerinize hazırım git tarzı uygulamalar bu işi nasıl yapıyor.
İyi günler.

merhaba hash kontrolü yaptırmak dosyanın tamamının diskden okunmasını sağlayacağı için söylediğiniz gibi uzun zaman alacakdır, bunun yerine dosyanın create modify zamanlarını bir yere kayıt edip karşılaştırırsanız, yada bu gibi değerlerden hash çıkarırsanız daha hızlı olacakdır.
Hocam oluşturma ve değiştirme tarihlerine bakmak aklıma geldi fakat ne kadar sağlıklı olur bilmiyorum aslında veriye bakarak kontrol etmek istiyorum. Şöyle bir yöntemde geldi aklıma stream ile aldığım için büyük dosyalarda örnek 20 mb+ ise ilk 5mb göre hash alıp oluştursam mutlaka hız olur fakat işte veri doğruluğu muamma
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#4
(28-02-2021, Saat: 00:22)narkotik Adlı Kullanıcıdan Alıntı:
(28-02-2021, Saat: 00:16)hayalyilmaz43 Adlı Kullanıcıdan Alıntı: merhaba hash kontrolü yaptırmak dosyanın tamamının diskden okunmasını sağlayacağı için söylediğiniz gibi uzun zaman alacakdır, bunun yerine dosyanın create modify zamanlarını bir yere kayıt edip karşılaştırırsanız, yada bu gibi değerlerden hash çıkarırsanız daha hızlı olacakdır.
Hocam oluşturma ve değiştirme tarihlerine bakmak aklıma geldi fakat ne kadar sağlıklı olur bilmiyorum aslında veriye bakarak kontrol etmek istiyorum. Şöyle bir yöntemde geldi aklıma stream ile aldığım için büyük dosyalarda örnek 20 mb+ ise ilk 5mb göre hash alıp oluştursam mutlaka hız olur fakat işte veri doğruluğu muamma

oluşturma+değiştirme+erişim+boyut+dosyaadıuzantısı+yolu = hash

şimdi eğerki amacınız dosya değişti ise, 1 byte dahi değişse dosyanın değiştirme tarihi değişir, bir uygulama bunu manuel set etmedikçe veya dosya sistemine raw olarak erişip değişiklik yapılmadıkça veriye tamam diyebilirsiniz,
diğer türlü ntfs nin bu tarz crc kontrolü bulunmuyor, böyle bir risk var ise, öyleyse uygulamanızın sistem loglarında disk için donanımsal hata varmı yokmu kontrolüde yapması gerekir.

değişiklik 5mb dan sonrada olmuş olabilir.
Cevapla
#5
@narkotik

Disk ile etkileşimde olduğunuz her süreç doğası gereği zaten yavaş olacaktır. Disk ile ne kadar az etkileşimde olursanız performans o raddede çoğalacaktır. Problem (sürecin uzun olması ile ilgili olarak) sizin de tahmin ettiğiniz gibi hash almaya çalışmanız değil, hash sırasında dosyayı okumanızdan kaynaklanıyor. Hash alma yöntemine sadece gerektiğinde başvurmak bence performansı arttıracaktır.

Performans ile ilgili bu sorunu aşmak için belki şunlar yapılabilir;
  • Klasör bazında çetele tutabilirsiniz.
  • Çetele dosyasında (veya tablosunda, artık o size kalmış) Dosya Adı, Oluşturma, Değiştirme Zamanı, Dosya Boyutu, Hash değeri alanlarını saklayabilirsiniz.
  • Çeteledekiler ile klasördekiler arasında zaman, boyut, dosya adı gibi farkları karşılaştırmak
  • Aynı isimli fakat farklı zaman ve/ya boyut bilgisine sahip olanlar için içeriğin değişip değişmediğini anlamak için hash kontrolü yapmak
  • Çetelede olup, diskte olmayanları silindi olarak yorumlamak
  • Çetelede olmayıp, diskte olanları yeni olarak yorumlamak
  • Alt klasörler için klasörün kendisinin de hashını alabilirsiniz fakat bunun için yapraktan gövdeye doğru ilerlemeniz gerekir.
Özünde çetele dosyasını (veya tablosunu) yaptığınız son kontroldeki istatistik bilgisi gibi düşünebilirsiniz.

İstatistik de işin içinde olduğu için belki şu makaleler size bir fikir verebilir;

https://mirrors.edge.kernel.org/pub/soft...cy-git.txt
https://mirrors.edge.kernel.org/pub/soft...d_8221_bit
https://linux.die.net/man/2/lstat
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Klasör İçindeki Resimleri Gösterme sadoal351 5 468 13-04-2024, Saat: 22:40
Son Yorum: sadoal351
Lightbulb Delphi 7zip Password lü Dosya Sıkıştırma ve Açma + Bonus RAR5 Desteği frmman 6 398 16-03-2024, Saat: 17:55
Son Yorum: delphi.developer
  Dosya isimlendirme bydelphi 6 602 16-01-2024, Saat: 16:38
Son Yorum: mustafaozpinar
Exclamation dosya özellikleri değiştirme erdogan 1 344 09-10-2023, Saat: 16:09
Son Yorum: hi_selamlar
  joystic kontrolu sadikacar60 2 435 13-08-2023, Saat: 20:34
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi