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

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   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)

aSi 18 Şubat 2012 23:57

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