Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

File.Delete()


Öne çıkan mesajlar

Mesaj tarihi:
Şimdi sorum şu aşağıdaki kod bloğunda m_path yolundaki dosyaları tek tek siliyor ancak bazı dosyalar readonly yada kullanılıyor olduğunda hata veriyor. İşte bu adımda o dosyanın kullanımda yada read only olduğunu anlayıp bir soraki dosyadan silmeye devam etsin istiyorum ancak etmiyor bir dosyada hata veriyorsa diğerleri de silinmeden bekliyor. Varmıdır bir yolu?


foreach (string dir in Directory.GetFiles(m_path))
{
File.Delete(dir);
m_progressBar.PerformStep();

}
Mesaj tarihi:
Kojiroh said:


try { File.Delete(dir); }
catch { }

bu sadece "şu hata alındı: hede hödö hatası" diyo geri kalanları silmeye devam etmiyor silme işlemini sonlandırıyor yanlış mı biliyorum?
Mesaj tarihi:
pekala zaten bu işlemi ben try catch içerisinde yapıyodum tryda üstte yazdığım catch te de şöyle bişey yer alıyodu bu silme işlemine hata verdikten sora devam etmesini durdurcak bişey değil sanırım. Yani bu try catch in silme işlemine devam etmesini sağlayan kod olduğunu sanmıyorum.


catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Mesaj tarihi:
O verdiğin catch bloğunun da hiçbi şeyi durdurmaması lazım. Her hata çıktığında mesaj kutusu açmaktan başka bi şey yaptığı yok onun da.
Eğer boş catch bloğuyla denediysen ve yine olmadıysa başka bi yerde bi sorun var demek ki.
Mesaj tarihi:
Şunlar işine yarayabilir: http://bytes.com/topic/c-sharp/answers/270312-c-delete-directory-containing-read-only-files http://www.issociate.de/board/post/294912/What%27s_the_best_way_to_delete_read-only_files?.html http://stackoverflow.com/questions/265896/how-do-i-delete-a-read-only-file
Mesaj tarihi:
Catch bloğuna girdiği anda delete metodunda exception çıkmış demektir. Niye devam etsin ki?

Daha iyi bir yol vardır ama aklıma ilk gelen şu: Rekursif olarak klasördeki tüm dosyaların flag'lerine bakcaksın, read-only olmayanları tek tek sileceksin.
Mesaj tarihi:
foreach (string dir in Directory.GetFiles(bidi))
{
FileInfo fi = new FileInfo(dir);

if (fi.IsReadOnly)
MessageBox.Show("readyOnly müdür" );
else
File.Delete(dir);
}


FileInfo class'ının isReadOnly property'si size dosyanın readonly olup olmadığını verir. Boolean tipindedir
Mesaj tarihi:
Neden dursun ki, ben de onu anlamadım. try..catch bloğu bi döngünün içinde. Döngünün rastgele bi çevriminde read-only bi dosyaya denk geldi mi Delete metodu exception yaratcak, boş catch bloğu onu yakalayıp hiçbi şey yapmicak, sonraki adımdan yani progressbar'ı ilerletme kısmından devam edicek. Sonra döngünün bi sonraki çevrimine gircek.
Ben mi yanlış kuruyorum kafamda anlamadım ki.
Mesaj tarihi:
eğer Exception varsa durur. ama boş catch {} bloğu olsaydı dewam ederdi.

Exception oluştuğunda orada işlemi durdurup, ekrana "dosyaya ulaşılamadı" hatası verir.
Mesaj tarihi:
Ben de ufak bi program yazdım test etmek amaçlı, çalışıyo. Olay nası bu kadar uzadı ben onu anlamadım asıl. Read only olanlar silinmeyecekse dediğim yolla, silinecekse Mirage'ın linkini verdiği yolla yapıldı mı bitti.

Read only'leri atlayacaksan:


foreach (string dir in Directory.GetFiles(m_path))
{
try { File.Delete(dir); }
catch { }
m_progressBar.PerformStep();
}



Read only'ler de silinecekse (dosya kullanımdaysa silemeyeceğine göre delete metodunu yine try..catch içine al hatta):


foreach (string dir in Directory.GetFiles(m_path))
{
FileInfo finfo = new FileInfo(dir);
finfo.IsReadOnly = false;
try { File.Delete(dir); }
catch { }
m_progressBar.PerformStep();
}
Mesaj tarihi:
Catch bloğu boş olarak denedim program hiçbişey yapmıyor ama arka planda aynı tepkiyi veriyor catch i dolu olanla.
Diyelim dosyalarını silmek istediğim klasörde 100 tane dosya var ve 50. dosya başka bir program tarafından kullanılıyor. işte bu dosyaları silmeye başlıyor 50 dosyaya geldiğinde program hata veriyor dosya kullanımda diye ve geri kalanlarıda silmiyor.
50 dosya halen duruyor o klasörde.
Catch doluda olsa boşta olsa silme işlemini durduruyor. Programı sonlandırmıyor sadece silme işlemi duruyor.
Catch doluyken hata verip duruyor boşken hata vermeden duruyor.
Mesaj tarihi:
Kojiroh said:

Neden dursun ki, ben de onu anlamadım. try..catch bloğu bi döngünün içinde. Döngünün rastgele bi çevriminde read-only bi dosyaya denk geldi mi Delete metodu exception yaratcak, boş catch bloğu onu yakalayıp hiçbi şey yapmicak, sonraki adımdan yani progressbar'ı ilerletme kısmından devam edicek. Sonra döngünün bi sonraki çevrimine gircek.
Ben mi yanlış kuruyorum kafamda anlamadım ki.


File.Delete(dir);

satırını görünce ben Delete metodu klasörü silmeye çalışıyor sandım. Döngü tek tek bütün dosyalar üzerinde dönüyorsa boş catch bloğuyla da çalışır. Benim anlatmak istediğimle aynı kapıya çıkıyor.

Edit: Devilmanta, try/catch'i döngünün içine koyduğuna emin misin? Bence sen dışına koymuşsun, exception çıkınca döngüden çıkıyorsun.
Mesaj tarihi:
peki using by another application'ı naptın? if le kontrol edicekmisin onuda?

FileAccess enum'una bakmanı öneririm.. sanırım ordan oku yada yaz diyebiliyorsun direk. Access veriyorsun bir anlamda, ne yaparsa yapsın sil falan gibi.
×
×
  • Yeni Oluştur...