Sabtu, 19 Juli 2014

Cara Mencari File dengan API FindFirstFile

Pengenalan
Jika anda berencana membuat scanner, metode ini adalah salah satu yang wajib anda pahami. Windows menyediakan fungsi API yang dapat dimanfaatkan untuk mendapatkan daftar file dan folder dari suatu direktori. Fungsi ini adalah FindFirstFile, FindNextFile dan FindClose. Ada pula fungsi terbaru bernama FindFirstFileEx, akan tetapi parameternya terlalu banyak, jadi kita cukup pelajari FindFirstFile saja.
Bentuk prototype FindFirstFile dalah

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);

lpFileName merupakan parameter yang menentukan lokasi folder yag akan kita cari daftar filenya.
lpFindFileData merupakan parameter yang berisi pointer ke struktur WIN32_FIND_DATA. Di dalamnya, kita dapat mengambil nama file satu-persatu dari hasil penelusuran yang telah dilakukan.
Bentuk struktur WIN32_FIND_DATA adalah seperti berikut:
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;


nFileSizeLow adalah ukuran file total, jika ukuran file diatas 4 GB, maka gabungan nFileSizeLow dan nFileSizeHigh akan menunjukkan ukuran file seluruhnya.
cFileName[] adalah nama file yang kita dapatkan dari hasl pencarian
cAlternateName adalah nama file tradisional(alternatif). Nama file ini biasanya terdiri atas 11 karakter dengan singkatan.

Yang akan kita praktekkan adalah bagaimana mengekstrak hasil pencarian data cFileName.
Selain Fungsi FindFirstFile, kita jga harus mengetahui fungsi FindNextFile. fungsi ini digunakan untuk mencari hasil penelusuran file-file selanjutnya.
Bentuk fungsi ini adalah:
BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA);
hFindFile adalah nilai handle yang kita dapatkan setelah pemanggilan fungsi FindFirstFile.

Cara Kerja
  1. Pertama, kita harus membuat sebuah struktur data WIN32_FIND_DATA, lalu panggil fungsi FindFirstFile dengan parameter direktori pencarian diikuti tanda bintang (misal: "C:\Windows\*") dan parameter pointer ke struktur yang telah kita buat.  Jika berhasil, fungsi ini mengembalikan nilai handle(nilainya selalu bukan 0), jika 0 artinya gagal, mungkin parameter direktori yang anda masukkan salah ketik.
  2. Berikutnya Olah hasil penelusuran pertama yang disimpan  pada struktur data.
  3. Ketiga, Lakukan pemanggilan fungsi FindNextFile secara loop, hingga mengembalikan nilai 0(false). 0 memiliki arti tidak ada file lain. Jangan lupa untuk mengolah setiap hasil di setiap loopingnya.
  4. Terakhir, setelah semua penelusuran selesai, panggil fungsi FindClose untuk mengakhirinya.
Bentuk fungsi FindClose adalah sebagai berikut:
BOOL FindClose(HANDLE hFindFile);

Kode Sepenuhnya

#include<stdio.h>
#include<windows.h>

HANDLE h;
WIN32_FIND_DATA find_data;
int main(int argc, char *argv[])
{
    h = FindFirstFile("D:\\", &find_data);
    if(h==0)
    {
        printf("error!");
        exit(1);
    }
    printf(find_data.cFileName);
   
    while(FindNextFile(h,&find_data) == TRUE)
    {
        printf(find_data.cFileName);
        putch('\n');
    }
    FindClose(h);
}


Hasil

Load disqus comments

0 comments