AccessTr.neT
Boş Klasör / Alt Klasör Silme - Baskı Önizleme

+- AccessTr.neT (https://www.accesstr.net)
+-- Forum: Microsoft Access (https://www.accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://www.accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Boş Klasör / Alt Klasör Silme (/konu-bos-klasor-alt-klasor-silme.html)

Sayfalar: 1 2 3


Boş Klasör / Alt Klasör Silme - donepezil - 11/01/2017

Merhaba;

Hem forum içinde hem de başka kaynaklarda yaptığım aramalarda işime yarayacak bir çözüm maalesef bulamadım. Bulduğum kodlar da dönüştürülemeyecek kadar karmaşıktı.

Sorun şu:

Herhangibir dosya yolundaki (örneğin veritabanının olduğu CurrentProject.Path\resimler ve alt klasörlerinde) boş klasörleri silmemiz gerekiyor. Proje içindeki döngüler çok karmaşık olduğu için klasör adı vererek bunu yaptırmak imkansız hale geldi. (Bu arada RmDir komutu da işe yaramıyor)

Bunu yapacak genel bir kod nasıl olmalı? (Örneğin ana klasörün alt klasörlerine bakıp, boyutu "sıfır" olanları silmek gibi?

Teşekkürler...


RE: Boş Klasör / Alt Klasör Silme - atoz112 - 11/01/2017

sayın donepezil,

bahsettiğiniz talebinize yönelik olarak;

öncelikle,bir hususu belirtmekte fayda var kanısındayım.

RMDIR Komutu;
eğer içerisinde başka klasör mevcutsa klasör silme işlemini uygulamaz ve hata verir.sadece,içeriği tamamen BOŞ ise işlemini gerçekleştirir.

ÖRNEK

uygulamanın olduğu klasörün içerisinde a_alt_klasoru adlı ve bu a_alt_klasoru adlı klasörün de içerisinde b_alt_klasoru adlı alt klasör olduğu geçerli olsun.

[b]a_alt_klasoru [/b]ve b_alt_klasoru alt klasörlerini silmek istediğimizde,

1) önce en içte yer alan alt klasörün (b_alt_klasoru) içerisinde eğer herhangi bir DOSYA ya da DOSYALAR mevcutsa,bu dosyaları tamamen silmelisiniz.bunu da KILL Komutu ile yapmalısınız.

2) sonrasında da,sırasıyla yine içteki alt klasörlerden başlamak sureti ile RMDIR Komutunu kullanarak içerden dışa doğru tüm klasörleri silmelisiniz.

Kod:
Kill CurrentProject.Path & "\" & "a_alt_klasoru" & "\" & "b_alt_klasoru" & "\" & "*.*"

RmDir CurrentProject.Path & "\" & "a_alt_klasoru" & "\" & "b_alt_klasoru"

RmDir CurrentProject.Path & "\" & "a_alt_klasoru"


kod satırlarını kullanarak silebilirsiniz.

bilginize...iyi çalışmalar,saygılar.


RE: Boş Klasör / Alt Klasör Silme - atoz112 - 11/01/2017

sayın donepezil,

bir önceki mesajda yazılı olan kodları kullandığınızda sorunsuz çalışmaktadır fakat buna bir de kontrol kodları dahil edilerek kullanmak daha yerinde olacaktır.

çünkü;
tekrar aynı butonu tıklama durumu veya bu kodları çalıştırma işlemi söz konusu olursa,herhangi bir hata iletisi vermemesini sağlamak gerekmektedir.

bunun için de;

Kod:
1
2
3
4
5
6
7
8
9
10
11
If Len(CurrentProject.Path & "\" & "a" & "\" & "b" & "\" & "*.*") > 0 Then
MsgBox ("Dosya ve klasörler silinmiştir."), vbInformation, "DOSYA VE KLASÖR SİLİNDİ UYARISI"
Exit Sub
Else
Kill CurrentProject.Path & "\" & "a" & "\" & "b" & "\" & "*.*"

RmDir CurrentProject.Path & "\" & "a" & "\" & "b"

RmDir CurrentProject.Path & "\" & "a"

End If


yukarıdaki kodları kullanmak daha geçerli olacaktır.

bilginize...iyi çalışmalar,saygılar.


RE: Boş Klasör / Alt Klasör Silme - donepezil - 11/01/2017

(11/01/2017, 14:55)atoz112 Adlı Kullanıcıdan Alıntı: sayın donepezil,

bir önceki mesajda yazılı olan kodları kullandığınızda sorunsuz çalışmaktadır fakat buna bir de kontrol kodları dahil edilerek kullanmak daha yerinde olacaktır.

çünkü;
tekrar aynı butonu tıklama durumu veya bu kodları çalıştırma işlemi söz konusu olursa,herhangi bir hata iletisi vermemesini sağlamak gerekmektedir.

bunun için de;

Kod:
1
2
3
4
5
6
7
8
9
10
11
If Len(CurrentProject.Path & "\" & "a" & "\" & "b" & "\" & "*.*") > 0 Then
MsgBox ("Dosya ve klasörler silinmiştir."), vbInformation, "DOSYA VE KLASÖR SİLİNDİ UYARISI"
Exit Sub
Else
Kill CurrentProject.Path & "\" & "a" & "\" & "b" & "\" & "*.*"

RmDir CurrentProject.Path & "\" & "a" & "\" & "b"

RmDir CurrentProject.Path & "\" & "a"

End If


yukarıdaki kodları kullanmak daha geçerli olacaktır.

bilginize...iyi çalışmalar,saygılar.



Sn Atoz teşekkür ederim;

Ama maalesef bu konuyu açmadan önce yukarıda belirttiğiniz tüm yolları denedim. Maalesef bahsettiğim "çözüm bulamadım" söylevi bunun içindi. Formun yapacağı alternatifler dahilinde bu algoritma bazen çalışmakta ama bazı ihtimallerde hata vermekte. Öncelikle klasör içeriğini silme işlemini bu işlemden önceki kodlar yapmakta. Klasör boş kaldıktan sonra aynı üst klasörün altında yan yana pekçok boş klasör kalmakta. Ama alt klasörlerden 1 tanesi muhakkak dolu olmak zorunda. Bundan dolayı klasör boyutlarını kontrol eden bir çözüm sanıyorum daha uygun olacaktır.

İncelemeniz bakımından şurada sizin de yardımınızla çözümler bulduğumuz çalışmanın son halini ekliyorum. Sizin de yardımda bulunduğunuz kodları çok daha temiz ve sade olduğunu düşündüğüm bir çalışmaya aktardım. Kullanıcının tüm hamle olasılıklarına göre klasörleri açıyor, resimleri taşıyor, klasör açtırmayan değişken (örnekte Tc No) değiştirilmişse sadece resim adını değiştiriyor. Sizi bu konuda daha fazla yormamak için genel soru açmak istemiştim.

Örnek çalışma ekte.

Saygılar.


Cvp: Boş Klasör / Alt Klasör Silme - alpeki99 - 11/01/2017

Recursive olarak çözüm getirebilirsiniz. Sabit bir klasör adı ve miktarı olmayacağı için ancak bu yöntemle çözülebilir.


RE: Boş Klasör / Alt Klasör Silme - donepezil - 11/01/2017

(11/01/2017, 16:09)alpeki99 Adlı Kullanıcıdan Alıntı: Recursive olarak çözüm getirebilirsiniz. Sabit bir klasör adı ve miktarı olmayacağı için ancak bu yöntemle çözülebilir.


Sn. alpeki99;

Maalesef recursive fonksiyon yazabilecek kadar vb kod bilgim yok Img-cray

Belki bir örnek çalışmada bulursam düzenleyebilirim.

İlginiz için teşekkür ederim.