C語言檔案查詢

2021-08-19 19:16:40 字數 2953 閱讀 7284

struct _finddata_t是用來儲存檔案各種資訊的結構體,使用這個結構體要引用的標頭檔案為「 #include 」它的結構體定義如下:

[cpp]view plain

copy

print?

struct

_finddata_t

;  

struct _finddata_t 

;

改結構體中各成員的變數的含義如下:

unsigned atrrib:檔案屬性的儲存位置。它儲存乙個unsigned單元,用於表示檔案的屬性。檔案屬性是用位表示的,主要有以下一些:_a_arch(存檔)、 _a_hidden(隱藏)、_a_normal(正常)、_a_rdonly(唯讀)、_a_subdir(資料夾)、_a_system(系統)。這些都是在中定義的巨集,可以直接使用,而本身的意義其實是乙個無符號整型(只不過這個整型應該是2的幾次冪,從而保證只有一位為 1,而其他位為0)。既然是位表示,那麼當乙個檔案有多個屬性時,它往往是通過位或的方式,來得到幾個屬性的綜合。例如唯讀+隱藏+系統屬性,應該為:_a_hidden | _a_rdonly | _a_system 。

time_t time_create:這裡的time_t是乙個變數型別,實際上就是長整形變數 long int,用來儲存從2023年1月1日0時0分0秒到現在時刻的秒數

time_t time_access:檔案最後一次被訪問的時間。

time_t time_write:檔案最後一次被修改的時間。

_fsize_t size:檔案的大小(位元組數表示)。

char name[_max_fname]:檔案的檔名。這裡的_max_fname是乙個常量巨集,它在標頭檔案中被定義,表示的是檔名的最大長度。

如何使用這個結構體才能夠將檔案的資訊儲存到該結構體的記憶體空間呢,這就需要_findfirst()、_findnext()和_fineclose()三個函式的搭配使用,下面介紹這三個函式:

long _findfirst( char *filespec, struct _finddata_t *fileinfo );

返回值:如果查詢成功的話,將返回乙個long型的唯一的查詢用的控制代碼。這個控制代碼將會在_findnext函式中被使用。失敗返回0.

引數:

filespec:標明檔案的字串,可支援萬用字元。比如:*.c,則表示當前資料夾下的所有字尾為c的檔案。

fileinfo :這裡就是用來存放檔案資訊的結構體的指標。這個結構體必須在呼叫此函式前宣告,不過不用初始化,只要分配了記憶體空間就可以了。函式成功後,函式會把找到的檔案的資訊放入這個結構體所分配的記憶體空間中。

int _findnext( long handle, struct _finddata_t *fileinfo );

返回值:若成功返回0,否則返回-1。

引數:

handle:即由_findfirst函式返回回來的控制代碼。

fileinfo:檔案資訊結構體的指標。找到檔案後,函式將該檔案資訊放入此結構體中。

int _findclose( long handle );

返回值:成功返回0,失敗返回-1。

引數:

handle :_findfirst函式返回回來的控制代碼。

該結構體和搭配的函式使用的邏輯就是先用_findfirst查詢第乙個檔案,若成功則用返回的控制代碼,呼叫_findnext函式查詢其他的檔案,當查詢完畢後用,用_findclose函式結束查詢。下面我們就按照這樣的思路來編寫乙個查詢某乙個資料夾下的所有word文件的程式。

然後開啟visual 2010 新建工程,輸入如下**:

[cpp]view plain

copy

print?

#include

#include

#include

#define addr 「e://test//.docx」

const

char sreachaddr=addr;  

int main(void)  

_findclose(handle);  

system(」pause」);  

return 0;  

}  

#include
const char* sreachaddr=addr;

int main(void)

_findclose(handle);

system("pause");

return 0;

}編譯執行,結果如下:

當然,在找到所有需要的檔案後,不僅僅可以通過終端列印出來,還可以進行刪除、改名等操作。一般的c語言病毒會用到這個結構體加配合函式進行找到某一型別的檔案然後進行惡意刪除,例如某一c語言病毒中的刪除操作**如下:

[cpp]view plain

copy

print?

void remove()  

;  for (i = 0; i 

;   for (i = 0; i < 3; i++)

_findclose(done);

}}

c語言實現檔案查詢

最近學到作業系統的檔案管理,研究了一下檔案查詢,如下 1.完整版 老師給出的示例 include windows.h include stdio.h int num 0 void find char path,char name findclose hfind sprintf szfind,s pa...

查詢 順序查詢 C語言

順序查詢 sequential search 的查詢過程為 從表的一端開始,依次將表中的關鍵字和給定的值進行比較,若表中的關鍵字和給定的值相等,則查詢成功,反之查詢失敗。優點 演算法簡單,適用於順序結構和鏈式結構 缺點平均查詢長度較大,效率較低 順序查詢的優化 詳細見 普通優化 順序查詢 設定監視哨...

C語言 查詢演算法

簡單查詢 順序查詢 從序列起始位置開始,逐個將序列中的元素與所要查詢的資料進行比較,有則查詢成功,如果查詢到序列最後乙個元素也沒有匹配,則查詢失敗 int ordersearch int a,int n,int data 二分查詢 二分查詢也稱折半查詢,其優點是速度快,缺點是要求資料必須是有序列序列...