Anasayfa > Kodlar > C Dizin Ağacı Oluşturan Fonksiyon Tasarlanması

C Dizin Ağacı Oluşturan Fonksiyon Tasarlanması

Öncelikli olarak bu fonksiyonun ne yapıcağından bahsedelim.

Fonksiyonumuz kök dizin olarak verilen dizinin altdizinleride dahil olmak üzere dolaşıcak ve tüm alt dizinlerdeki dosyaları bize göstericek.

Gereklilikler : global bir karakter katarı,özyinemeli bir fonksiyon, dizin ağacında ileri geri hareket edebilmek için gerekli iki ayrı fonksiyon.

Burada:

“windows.h” başlık dosyası projeye dahil edildi.

AddPath ,DelPath ve ViewTree fonksiyonlarının prototipleri tanımlandı.

Path isminde dizinlerin yolunu tutucak ve bu dizinler içerisinde geçiş yaparken aktif eleman olarak görev alıcak karakter katarı tanımlandı.

ViewTree Fonksiyonu

Açiklamalar:

1-) HANDLE , typedef (void *) şeklinde tanımlanmış bir bildirimdir.W32 programlamada sıkça adı geçer.Bir adres gösterir.Tabiki fiziksel olarak tam bir adrese karşılık gelmez.

2-)WIN32_FIND_DATA bir yapıdır.Döküman sonunda içeriği paylaşılacaktır.

3-)Burada if koşulu handle’ın INVALID_HANDLE_VALUE olup olmadığına bakıyor.

Eğer öyleyse FindFirstFile fonksiyonu başarısız olmuştur.Bunun için uyarı yapılıyor.

#define INVALID_HANDLE_VALUE ((void *)-1)

Şeklinde tanımlanmış bir sabittir.

4-)Dosya ismi “.” Veya “..” ise ekrana yazdırılmıyor.

5-)Burada dosya özniteliği eğer directory ( klasör ) ise

Fonksiyonumuz AddPath fonksiyonunu çağırıyor ve klasörün ismini global Path katarına ekliyor.Ardından,

Fonksiyon kendi kendisini çağırarak, bu seferde bu klasör içerisini dolaşıyor.

6-)Sadece fonksiyonun akışı izlenebilsin diye eklenmiştir.

7-)Dolaşımı diğer dosyaya geçirir.Bunu yaparken while içerisinde döndürdüğü değer kontrol edilir.Eğer FALSE(0) ise döngü sona erer,eğer TRUE(0 dışı bi değer) ise döngü devam eder.

8-)DelPath fonksiyonu çağrılıyor ve son eklenen dizinin dolaşımı tamamlandığı için global Path katarından kaldırılıyor.

AddPath Fonksiyonu

1-)Fonksiyona “.” Veya “..” gönderilirse FALSE değeri döndürülüyor.

2-)Path karakter katarındaki yıldız karakterini ekart edip yerine yeni dizin ismini kopyalamak için uygulanmış bir adımdır.

Bunun dışında fonksiyon genel bir şekilde şöyle anlatılabilir

Fonksiyon kendisine gönderilen dizin ismini global Path değişkenine ekler.

Bunu sondaki * karakterinden başlayarak ve en sona \* ekleyerek gerçekler.

DelPath Fonksiyonu

Bu fonksiyonda Flag değişkeni,ilk “\” karakterinde değilde ikinci “\” karakterinde işlem yapması için kullanılmıştır.Görüldüğü üzere ilk “\” karakteri “*” dan önceki karakterdir.

Ve sonunda

Main Fonksiyonu

Kullanılan api’lerin prototipleri;

HANDLE WINAPI FindFirstFile(
  __in   LPCTSTR lpFileName,
  __out  LPWIN32_FIND_DATA lpFindFileData
);
BOOL WINAPI FindNextFile(
  __in   HANDLE hFindFile,
  __out  LPWIN32_FIND_DATA lpFindFileData
);

typedef struct _WIN32_FIND_DATA {
  DWORD    dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD    nFileSizeHigh;
  DWORD    nFileSizeLow;
  DWORD    dwReserved0;
  DWORD    dwReserved1;
  TCHAR    cFileName[MAX_PATH];
  TCHAR    cAlternateFileName[14];
}WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;

Dev C++ v4.9.9.2’de derlenmiştir.

Kategoriler:Kodlar Etiketler:, , ,
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: