-
C ve C++
(
https://www.ircforumlari.net/c-ve-c/)
- -
C ile dosya arama
(
https://www.ircforumlari.net/c-ve-c/454427-c-ile-dosya-arama.html)
C ile dosya arama [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
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:
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:
#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();
}
|
Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 12:15. | |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk