none
Asp.Net Tara ve Sil RRS feed

  • Soru

  • Merhabalar...

    Arkadaşlar herkese kolay gelsin.Benim sizlere bir sorum olacaktı yardımcı olursanız çok sevinirim.Şimdi arkadaşlar benim sorum şu şekilde;

    Ftp Resimler adı altında bulunan resimler var diyelim.Ben bu resimleri db de arama yaptırıp bu resimlerin linkleri db de olmayan resimleri tara ve sil olayını yapmak istiyorum ama bir türlü yapamadım.Yardımcı olursanız çok sevinirim arkadaşlar.

    Sevgilerle...

    Sedat TİRYAKİ

    20 Nisan 2013 Cumartesi 19:52

Yanıtlar

  • System.IO.Directory class'ını kullanarak dosyaları bir array'e doldurabilirsiniz. Daha sonra database den aldığınız dosya isimlerini bir listeye doldurun. Aralarındaki farkı linq Except methoduyla alıp File.Delete ile silebilirsiniz.

    using System.IO;
    
    var _dosyalar = Directory.GetFiles(MapPath("~/Resimler")
    , "*.*").ToList();
    var _tablo = <database den çektiğiniz dosya isimleri listesi>
    var _fark = _dosyalar.Except(_tablo);
    foreach(var item in _fark)
       File.Delete(MapPath(item));

    Burada muhtemelen database'de dosyaların sadece isimlerini tutmuşsunuzdur, iki listenin elemanlarının eşleşebilmesi için fiziksel yolları ile birlikte listeye doldurulması gerekiyor bunun için Path.Combine methodunu kullanabilirsiniz. Dikkat silmeden önce listeyi bir yere yazdırarak kontrol edin çünkü iki listede ortak yoksa tüm dosyalarınız silinir!

    Not: Bu çektiğiniz zorluk resim dosyalarını database'e koymamanızdan kaynaklanıyor, yanlış hesap hep Bağdat'tan döner.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC


    21 Nisan 2013 Pazar 05:36
    Moderatör

Tüm Yanıtlar

  • System.IO.Directory class'ını kullanarak dosyaları bir array'e doldurabilirsiniz. Daha sonra database den aldığınız dosya isimlerini bir listeye doldurun. Aralarındaki farkı linq Except methoduyla alıp File.Delete ile silebilirsiniz.

    using System.IO;
    
    var _dosyalar = Directory.GetFiles(MapPath("~/Resimler")
    , "*.*").ToList();
    var _tablo = <database den çektiğiniz dosya isimleri listesi>
    var _fark = _dosyalar.Except(_tablo);
    foreach(var item in _fark)
       File.Delete(MapPath(item));

    Burada muhtemelen database'de dosyaların sadece isimlerini tutmuşsunuzdur, iki listenin elemanlarının eşleşebilmesi için fiziksel yolları ile birlikte listeye doldurulması gerekiyor bunun için Path.Combine methodunu kullanabilirsiniz. Dikkat silmeden önce listeyi bir yere yazdırarak kontrol edin çünkü iki listede ortak yoksa tüm dosyalarınız silinir!

    Not: Bu çektiğiniz zorluk resim dosyalarını database'e koymamanızdan kaynaklanıyor, yanlış hesap hep Bağdat'tan döner.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC


    21 Nisan 2013 Pazar 05:36
    Moderatör
  • Önay hocam çok tşk ederim yardımlarınız için.Peki hocam örneğin haberler, duyurular, resimler vs. tablosunun tüm resimleri ftp de bulunan resimler klasörünün içerisinde yer almakta.Ben bu tabloların aramasınıda mı bu şekilde yapacağız?
    22 Nisan 2013 Pazartesi 08:45
  • Hocam peki asp.net mvc 4 te kullanımı nasıl olur bu kodların?
    23 Nisan 2013 Salı 10:35
  • Bu kodların mvc4 de bir farkı olmaz, ancak kodun nerde olduğu biraz değişir. Sizin projeniz MVC4 mü?

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    24 Nisan 2013 Çarşamba 14:06
    Moderatör
  • Evet hocam MVC 4. Haberler tablosunun listesini şu şekilde çekiyorum diyelim.

    var query = from c in db.haberlerlsts where c.onay == true orderby c.id descending select c;

    Ben haberlerlsts tablosunun içerisinde olmayan resimleri sildirmek istiyorum.Çünkü hocam resimler ftp de kalıyor hep ben ayda bir tarama yap ve sil dicem kendisi otomatik olarak ftpde bulunan dosyaları tarayacak veri tabanı ile ilişkisi olmayan resimleri bulup ve silecek.Böyle bir sistem yapmak istiyorum ama yapamadım bir türlü.

    27 Nisan 2013 Cumartesi 10:50
  • System.IO.Directory class'ını kullanarak dosyaları bir array'e doldurabilirsiniz. Daha sonra database den aldığınız dosya isimlerini bir listeye doldurun. Aralarındaki farkı linq Except methoduyla alıp File.Delete ile silebilirsiniz.

    using System.IO;
    
    var _dosyalar = Directory.GetFiles(MapPath("~/Resimler")
    , "*.*").ToList();
    var _tablo = <database den çektiğiniz dosya isimleri listesi>
    var _fark = _dosyalar.Except(_tablo);
    foreach(var item in _fark)
       File.Delete(MapPath(item));

    Burada muhtemelen database'de dosyaların sadece isimlerini tutmuşsunuzdur, iki listenin elemanlarının eşleşebilmesi için fiziksel yolları ile birlikte listeye doldurulması gerekiyor bunun için Path.Combine methodunu kullanabilirsiniz. Dikkat silmeden önce listeyi bir yere yazdırarak kontrol edin çünkü iki listede ortak yoksa tüm dosyalarınız silinir!

    Not: Bu çektiğiniz zorluk resim dosyalarını database'e koymamanızdan kaynaklanıyor, yanlış hesap hep Bağdat'tan döner.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC


    Üstad o zaman resimleri veritabanına yüklemek dahamı mantıklı diyorsun ?  Diyelimki 1000 tane resim var bunlar veritabanını aşırı şişirip şişirmez mi ?


    yok

    27 Nisan 2013 Cumartesi 12:59
  • Önay hocam bu kodları dediğiniz gibi kullanıyorum ama aşağıdaki yerde altı çizili hatalı gösteriyor kodları.

    var _fark = _dosyalar.Except(_tablo);
    29 Nisan 2013 Pazartesi 15:00
  • using System.Linq;
    

    eklemelisin. Tabi projenin framework'ü 3.5 ve ya üzeri olmalı.

    Diğer soruna gelince, evet database şişer, klasöre yazarsan da disk şişer. İkisinde de resme ait byte'lar disk üzerine yazılıyor. Aralarındaki fark birine file system ile diğerine database engine ile ulaşıyorsun.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    29 Nisan 2013 Pazartesi 16:14
    Moderatör