VC 根據路徑遍歷所有檔案

2021-07-23 16:22:05 字數 2676 閱讀 9654

最近做的乙個專案,需要在vc下遍歷指定路徑的所有檔案,和之前的delphi所採用的方式一樣:遞迴呼叫。直接貼**

bool cldscanfiledlg::doscan( const cstring& v_strdir )

; wchar_t chsubdir[max_long_path] = ;

wchar_t chfilepath[max_long_path] = ;

wchar_t chtemp[max_long_path] = ;

wchar_t chsql[max_buff_length] = ;

struct _wfinddata_t c_file;

long hfile;

int ifilestatus = 0;

static int iscanfilenum = 0;

static int iencfilenum = 0;

static int idecfilenum = 0;

cstring strinfo =l"";

cstringlist dirlist;

cstringlist failedpathlist;

cldsqlite* pdb = new cldsqlite;

// 讀取當前時間

systemtime systime;

cstring strscantime = l"";

::getlocaltime(&systime);

strscantime.format(l"%4d%02d%02d%02d%02d%02d", systime.wyear, systime.wmonth,

systime.wday, systime.whour, systime.wminute, systime.wsecond);

// 更新目錄掃瞄狀態

cstring str = l"pathconfigdb";

setcurrentdatabase(str);

pdb->init(m_szdbpath, true);

cstring strdirtemp(v_strdir);

strdirtemp.replace(l"'", l"''"); // 替換單引號'為''

// 更新配置庫,掃瞄路徑狀態為1 代表正在掃瞄

swprintf_s(chsql, l"update scan_status set scan_status = 1, scan_time = '%s' where scan_path='%s';", strscantime, strdirtemp);

pdb->excutesql(chsql);

pdb->release();

// 初始化當前掃瞄目錄db檔案鏈結

this->setcurrentdatabase(v_strdir);

pdb->init(m_szdbpath, false);

dirlist.addhead(v_strdir);

while (!dirlist.isempty())

if (c_file.attrib & _a_subdir)

dirlist.addhead(chsubdir);

}else

else

}// 掃瞄檔案總數更新

iscanfilenum++;

strinfo.format(l"%d", iscanfilenum);

getdlgitem(idc_static_scan)->setwindowtext(chfilepath);

getdlgitem(idc_static_scan_num)->setwindowtext(strinfo);

//獲取檔案加解密狀態

/*m_strlog.format(l"the scan file is :%s", chfilepath);

ifilestatus = this->filedecryptstatus(chfilepath);

if (ifilestatus != 1)

//替換特殊單引號

cstring strtemp(chfilepath);

strtemp.replace(l"'", l"''");

//判斷該資料是否存在

swprintf_s(chsql, l"select count(*) from file_info where file_path='%s';", strtemp);

if (pdb->dataexits(chsql) <= 0)

// sql語句批量執行,預設累計滿100條進行插入

swprintf_s(chsql, l"insert into file_info values ('%s', %d, 0, 2, 0, '%s');", strtemp, ifilestatus, strscantime);

if (m_strfplist.getsize() < m_ibatchinsertnum)

else

}//sleep(300);}}

_findclose(hfile);

} }//防止最後剩餘檔案未插入

if (m_strfplist.getsize() != 0)

//釋放db鏈結

pdb->release();

delete pdb;

pdb = null;

return true;

}

VC 根據檔案路徑獲取裝置路徑及裝置名

專案中間遇到乙個問題,需要判斷檔案在哪個裝置上,翻了一遍msdn,找到了下面的解決方案。有人可能會覺得 splitpath就可以了,這是不行的,因為 splitpath不能正確獲取掛載到目錄的裝置。解決思路方法是getvolumepathname獲取裝置根路徑,然後呼叫getvolumenamefo...

VC遍歷資料夾下所有檔案和資料夾

2010 03 25 16 59 一 先介紹乙個結構win32 find data typedef struct win32 find data win32 find data win32 find data ffd handle hfind findfirstfile c ffd 二 函式find...

VC遍歷資料夾下所有檔案和資料夾

一 先介紹乙個結構win32 find data typedef struct win32 find data win32 find data 可以通過 findfirstfile 函式,根據檔案路徑把待操作檔案的相關屬性讀取到 win32 find data 結構中去 win32 find dat...