Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C / Sys Prog. Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 5.10.2002
Okunma Sayısı : 28270
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Bir dizin içindeki dosyaların bulunması - I
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Merhaba bu yazımızda günümüz işletim sistemlerinin temeli olan dosya bulma kavramını göreceğiz.Özellikle Windows ve Linux türevi işletim sistemlerinde özel bir dosya türü vardır. Bu dosya türü genellikle klasör olarak bilinir.Klasör dışındaki diğer dosyalar klasörler içinde saklanabilir. Bir dosyanın işletim sistemi modülü içinde bulunabilmesi için dosyanın göreceli yol bilgisine ihtiyacımız vardır. Mesela "C" sürücüsünün altında "sefer.dat" dosyasının dosya yolu bilgisi yani path bilgisi şöyle ifade edilir : "c:\\sefer.dat" . Burdan yola çıkarak bizim bu yazı çerçevesi içerisinde yapacağımız şey kullanıcıdan aldığımız bir path bilgisi içindeki dosyaları bulmak ve ekrana yazdırmaktır.

Basit programımızı geliştirmeye başlamadan önce biraz ön bilgi konuyu kavrayabilmemiz için iyi olacaktır. Bildiğiniz gibi bir dizin içindeki dosyaların elde edilmesi sistem programlamada ve uygulamada çok büyük öneme sahiptir.Örneğin bir dosyanın dizin ağacında aranması, dosyalara toplu işlemlerin yapılması ya da dizinin sıralı bir şekilde gösterilmesi gibi uygulamalar az sonra öğreneceğimiz basit algoritma ile gerçekleştirilir.

Dizin yapıları ve dosyalama organizasyonu işletim sistemine özgü olduğu için her işletim sisteminde dosya bulma işlemini yerine getiren özel fonksiyonlar vardır. Bu tür işletim sistemine özgü olan fonksiyonlara genel olarak "sistem fonksiyonları" denir. Zaten bizde bu yazımızda Windows işletim sistemine ait sistem fonksiyonlarını kullanacağız.

Dizin içinde dosya arayan fonksiyonlar her işletim sisteminde genellikle bulunur.Bu fonksiyonlkar DOS işletim sisteminde findfirst,findnext ; Win32’de findfirstfile,findnextfile; UNIX/LINUX türevi işletim sistemlerinde ise opendir,readdir ve closedir’ dır.

Şimdi DOS altında dizin içinde dosya arama yapan findfirst ve findnext fonksiyonlarını tanıyalım:

findfirst fonksiyonu

findfirst fonksiyonunun prototip bilgisi <dir.h> başlık dosyası içinde bulunur.Bu fonksiyonun prototipi aşağıdaki gibidir;

int findfirst(const char *dosy_yolu,struct ffblk * ffblk,int attrib)

Örnek:

findfirst("c:\\windows\\sefer.dat" , &ffblk , 0);

İlk parametre dosyaların aranacağı ’path’ bilgisinin saklanacağı karekter dizisidir.İkinci parametre çeşitli dosya bilgilerinin saklandığı 6 elamanlı ve dir.h başlık dosyası içinde tanımlanmış bir yapı nesnesi türünden bir adrestir. struct ffblk türünün yapısı şu şekildedir.

struct ffblk{
     char ff_reserved[21];
     char ff_attrib;
     int ff_ftime;
     int ff_fdate;
     long ff_fsize;
     char ff_name[13];
}

Yapı elemanlarının adından da anlaşılacağı gibi, struct ffblk yapısı dosya adı, tarih, tür ve büyüklük gibi bilgileri tutar.Şimdilik bizim bilmemiz gerekn ff_name ve attrib özelliğidir.ff_name elemanı dosyanın adını, ff_atrib ise dosyanın türünü (arşiv,hidden,directory,system) tutar.

findfirst fonksiyonunun 3. parametresi ise hangi tür doyaların aranacağını gösterir.3. parametre olarak sıfır değeri verdiğimizde findfirst fonksiyonu normal dosyalar dediğimiz "read only ve archive" dosyalarını arar. Bu konu hakkında daha detaylı bilgiyi sonraki makalelerimizde bulabilirsiniz. Biz şimdilik 3 parametre olarak "0" gireceğiz.

findfirst fonksiyonunun geri dönüş değeri ise bize fonksiyonun başarılı olup olmadığı hakkında bilgi verir.Fonksiyon başarılıysa "0", başarısızsa "1" değerine geri döner.

Dosya ismi olarak dosyanın tam adını girebildiğimiz gibi "*" ve "?" gibi joker karekterleri de girebiliriz.Bu durumuda findfirst fonksiyonu bu koşulu sağlayan ilk fonksiyonu bulur.

findnext fonksiyonu

findfirst fonksiyonu ile birden fazla dosya bulunması olası ise ilk bulunan dosya dışındaki dosyalar findnext fonksiyonu ile bulunur. İşletim sistemleri dosyaları diskte kendilerine özgü bir şekilde sıraladıkları için bu organizasyonu bizim bilmemiz zordur.findnext fonksiyonu paremetre olarak bir dosya bilgisi alır ve bu dosya bilgisine bakarak bir sonraki dosyanın bilgisi ile yer değiştirir.(Unutmayın dosya bilgisinde kastımız "struct ffblk" yapısıdır.)

findnext fonksiyonununda prototipi <dir.h> başlık dosyasındadır, ve parametrik yapısı aşağıdaki gibidir.

int findnext(struct ffblk *finfo);

Geri dönüş değeri aynı şekilde fonksiyonun başarılı olup olmadığını gösterir.

Şimdi bu öğrendiğimiz fonksiyonlarla klasik bir dizin listeleme programı yazalım.

 

#inlude <stdio.h>
#include <dir.h> //neden oldugunu biliyoruz değilmi?

int main()

{
  struct ffblk dosyamiz; /* bu yapı nesnesi dosya bilgilerimizi saklayacak.*/
  int sonuc; /* fonksiyonlarımızın başarılı olup olmadığını kontrol edeceğiz.*/
  char dosya_yolu[80]; /*kullanıcıdan alacağımız patyh bilgisini sakalayacağımız dizi.*/
  printf("Lütfen bir yol giriniz:");
  gets(dosya_yolu); /*kullanıcıdan alkdığımız yolu diziye yerleştirdik.*/

  sonuc=findfirst(dosya_yolu,&dosyamiz,0); /* dosya_yolundaki ilk dosyamızı bulduk.
  şimdi bir döngü içinde dosya bilgilerini findnext fonksiyonuna gönderip fonksiyon başarısız olana   kadar devam edeceğiz.böylece dosya bulma işlemi bitmiş olacak.sonrada istediğimiz formatta dosya   ismini ve istediğimiz dosya bilgilerini ekrana yazdırabiliriz.*/

  while (!sonuc){   // işlem başarısız olana kadar devam et
      printf("%-20s--%-ld\n",dosyamiz.ff_name,dosyamiz.ff_size); /*dosya adını ve büyüklüğünü alt alta       yazdık */
      sonuc = findnext(&dosyamiz); /*bir sonraki dosyanın bilgilerini istiyoruz ve dosyamiz’in içine saklıyoruz*/
  }

}

Ve ilk dosya arayan programımızı yazdık.Bundan sonraki yazılarımızda daha ileri uygulamalarda görüşmek üzere.

Bu yazı ile ilgili her türlü sorununuzu bana iletebilirsiniz.

Makale:
Bir dizin içindeki dosyaların bulunması - I C ve Sistem Programlama Sefer Algan
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor