IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 18 Şubat 2012, 23:57   #1
Çevrimdışı
aSi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
C ile dosya arama





Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Bu yazıda, windows.h kütüphanesinin bazı fonksiyonları kullanılarak dizinlerde dolaşıp dosya arama ve istenirse dosyayı açma işlemlerini yapan C kodlarını paylaşacağım.Henüz beta aşamasındaki uygulamanın c kodları aşağıdaki gibidir. Bu konuyla ilgili çalışması olan arkadaşlar için faydalı olacağını düşünüyorum. Genel olarak windows.h da tanımlı olan WIN32_FIND_DATA yapısı kullanıldığı için bu yapıdan biraz bahsedelim. Bu yapıdaki bir değişken için, dosyanın adı yolu oluşturulma tarihi gibi bilgilere erişilebilir. Yapının içeriği aşağıdaki gibidir.
Not: Exe nin bulunduğu dizinde arama yapmak için ‘.’ karakteri kullanılır ör:dosya yolu ./Music

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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]; }


Geliştirilebilir(Büyük küçük harf ayrımı yapma farklı arama algoritmaları düzenleme vs.) yapıdaki kodlar aşağıda yer almaktadır.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
#include<windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include<conio.h> #include <dirent.h> int sayac=0;//dosya sayısını tutar char aranan_kelime[50]=""; void dosyaRun(char []);//system komutu ile doosyanın çalıştırılması bool klasorKontrol(char*);//klasörmü yoksa dosyamı kontrolü void strSifirla(char[]);//string sıfırlama fonksiyonu void strAra(char[],char []);//string arama fonksiyonu void agac(char* );//dizin gezme fonksiyonu bool klasorKontrol(char* adres)//belirtilen yolun klasör olup olmadığını kontrol eder { int length; length=strlen(adres); DIR *d; d=opendir(adres);//eğer açılmaya çalışılan yol klasör ise d doğru bir değer döner if(d) { closedir(d); return false; } else return true; } void strSifirla(char kar[])//string sıfırlaması yapan fonksiyon { int uzunluk=strlen(kar)+3; for(int i=0;i<=uzunluk;i++) kar[i]='\0'; } void strAra(char yol[MAX_PATH],char dosya[MAX_PATH])//yol değişkeni içinde girilen katarın olup olmadığını kontrol eder { char deg[MAX_PATH]=""; int j=0; for(int i=0;i<strlen(yol);i++) { for(int j=i;j<strlen(yol);j++) { int ksayac=0; for(int k=i;k<=j;k++) { deg[ksayac]=yol[k]; ksayac++; } if(strcmp(deg,aranan_kelime)==0)//eğer kelime bulunursa { printf("\ndosya bulundu...\n%s\n acilsin mi e/h?",yol); char ch=getch(); if(ch=='e' || ch=='E') dosyaRun(dosya); printf("\naranıyor...\n"); return; } strSifirla(deg); } } } void dosyaRun(char dosya[MAX_PATH])//system("") komutu ile yoldaki dosyanın açılmasını sağlar { int i; char runDosya[MAX_PATH]; runDosya[0]='"'; for(i=0;i<strlen(dosya);i++) { runDosya[i+1]=dosya[i]; } runDosya[i+1]='"'; runDosya[i+2]='\0'; system(runDosya); } void agac(char* yol)//dizin tarama islemi bu fonksiyonla yapilir { char aranan[MAX_PATH],sonraki[MAX_PATH]; bool sonuc=true; WIN32_FIND_DATA dbilgi; HANDLE dDir; sprintf(aranan,"%s\\*.*",yol); dDir=FindFirstFile(aranan,&dbilgi); if (dDir == INVALID_HANDLE_VALUE) return; while(sonuc) { if (!strcmp(dbilgi.cFileName, ".")) //eğer nokta ile karşılaşılmaışsa { FindNextFile(dDir, &dbilgi); //sonraki dosyayı bul sonuc = FindNextFile(dDir, &dbilgi); continue; } sprintf(sonraki, "%s\\%s", yol, dbilgi.cFileName); if(klasorKontrol(sonraki))// sıradaki yol klasör den farklı ise { char yoll[255]; sayac++; strAra(dbilgi.cFileName,sonraki); } if (dbilgi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) agac(sonraki);//rekürsif yapı ile fonksiyon yeniden çağrılıyor ve bir sonraki dizindeki elemanı aramak için sonraki yolu fonksiyona gönderiliyor sonuc = FindNextFile(dDir, &dbilgi); } FindClose(dDir); } main() { char yol[MAX_PATH]; printf("dosya yolu :"); gets(yol); printf("aranan kelime :"); gets(aranan_kelime); printf("\naraniyor...\n"); agac(yol); printf("arama bitti...%d dosya arandi...",sayac); getch(); }


__________________
Doğruları biliyorsan, yalanları dinlemek eğlencelidir.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
arama, dosya, ile


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
vbulletin dosya arama Coded41 vBulletin Sorunları ve Çözümleri 7 11 Mart 2010 20:23
Dosya ve Klasör Arama Cemalizim Visual Basic 0 21 Temmuz 2008 18:19
Mayoko V1.1 (Rapidshare dosya arama motoru) Lee Bilgisayar Donanımı 0 13 Ocak 2008 13:06
/dtara sürücü dosya(Dosya arama) L4roXyL mIRC Scripting Hazır Kodlar 2 21 Eylül 2007 15:44
Dosya Arama Addonu CipriX mIRC Scripting Hazır Kodlar 0 18 Mayıs 2007 19:13