當前位置:首頁 » 編程語言 » c語言獲取文件修改時間

c語言獲取文件修改時間

發布時間: 2024-05-28 17:30:00

A. c語言:如何得到指定地址的文件夾中所有文件的文件名和其修改時間 包括子文件內的

俺前段時間寫了段功能相似的程序,但用的是用C++/STL寫的,訪問目錄使用了win32api(能訪問指定目錄的子目錄)。

獲取文件名與修改時間由FileOfDirectory::detectFiles實現(其實你只需要看這一個函數即可)。

這段程序以STL數組保存單個文件名,查詢過程中沒有回溯,wcsstr函數內部也是KMP,所以事實上這個程序也是按KMP查詢的

安時間排序時使用STL演算法庫,時間復雜度同快速排序。

最後,這段代碼是在VS2010編譯的。

#include<vector>

#include<algorithm>

structFileNameAndTime

{

wchar_tszPath[MAX_PATH];//filedirectory

wchar_tszName[MAX_PATH];//filename

FILETIMElastAcc;//lastaccesstime

FileNameAndTime()

{

memset(&lastAcc,0,sizeof(lastAcc));

memset(szName,0,sizeof(wchar_t)*MAX_PATH);

memset(szPath,0,sizeof(wchar_t)*MAX_PATH);

}

FileNameAndTime(constPWCHARfn,constPWCHARpa,constLPFILETIMEft)

{

if((0==fn)||(0==pa)||(0==ft))

return;

memcpy(&lastAcc,ft,sizeof(lastAcc));

wcscpy(szName,fn);

wcscpy(szPath,pa);

}

FileNameAndTime(constFileNameAndTime&fnd)

{

memcpy(&this->lastAcc,&fnd.lastAcc,sizeof(this->lastAcc));

wcscpy(this->szName,fnd.szName);

wcscpy(this->szPath,fnd.szPath);

}

constFileNameAndTime&operator=(constFileNameAndTime&fnd)

{

if(this!=&fnd){

memcpy(&this->lastAcc,&fnd.lastAcc,sizeof(this->lastAcc));

wcscpy(this->szName,fnd.szName);

wcscpy(this->szPath,fnd.szPath);

}

return*this;

}

voidGetFullPath(wchar_t(&fp)[MAX_PATH])const

{

wcscpy(fp,szPath);

wcscat(fp,szName);

}

friendbooloperator>(constFileNameAndTime&l,constFileNameAndTime&r);//comparethisobjectbyaccesstime

};

booloperator<(constFileNameAndTime&l,constFileNameAndTime&r)//forsort

{

if(l.lastAcc.dwHighDateTime<r.lastAcc.dwHighDateTime)

returntrue;

elseif(l.lastAcc.dwHighDateTime==r.lastAcc.dwHighDateTime)

{

if(l.lastAcc.dwLowDateTime<r.lastAcc.dwLowDateTime)

returntrue;

}

returnfalse;

}

classFileOfDirectory

{

private:

staticconstwchar_tszDot[];

staticconstwchar_tszDotDot[];

staticconstwchar_tcStar;

staticconstwchar_tcSlash;

private:

std::vector<FileNameAndTime>vecFT;

wchar_tszCurrentPath[MAX_PATH];

private:

voidvalidatePath(constwchar_t*pPath)

{

wcscpy(szCurrentPath,pPath);

intlen=wcslen(szCurrentPath);

if((cStar!=szCurrentPath[len-1])

&&(cSlash!=szCurrentPath[len-2]))

{

szCurrentPath[len]=cSlash;

szCurrentPath[len+1]=cStar;

szCurrentPath[len+2]=0;

return;

}

if((cStar!=szCurrentPath[len-1])

&&(cSlash==szCurrentPath[len-2]))

{

szCurrentPath[len]=cStar;

szCurrentPath[len+1]=0;

return;

}

}

voiddetectFiles(constLPWSTRszDir)

{

WIN32_FIND_DATAffd;

HANDLEhFind=::FindFirstFile(szDir,&ffd);

if(INVALID_HANDLE_VALUE==hFind)

return;

do

{

if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)

{

if((0==wcscmp(ffd.cFileName,szDot))||(0==wcscmp(ffd.cFileName,szDotDot)))

continue;

else

{

wchar_tszTempPath[MAX_PATH];

wcscpy(szTempPath,szDir);

szTempPath[wcslen(szTempPath)-1]=0;

wcscat(szTempPath,ffd.cFileName);

intlen=wcslen(szTempPath);

szTempPath[len]=cSlash;

szTempPath[len+1]=cStar;

szTempPath[len+2]=0;

detectFiles(szTempPath);

}

}

else{

wchar_tpath[MAX_PATH];

wcscpy(path,szDir);

path[wcslen(path)-1]=0;

vecFT.push_back(FileNameAndTime(ffd.cFileName,path,&ffd.ftLastAccessTime));

}

}

while(::FindNextFile(hFind,&ffd)!=0);

}

public:

FileOfDirectory(constLPWSTRszDir)

{

validatePath(szDir);

detectFiles(szCurrentPath);

}

voidSortByAccessTime()

{

sort(vecFT.begin(),vecFT.end());

}

intNumOfFiles()const{returnvecFT.size();}

intFindFilesByKeyWord(wchar_t*pszFn,int*outCome,intoutComeLen,boolbMatchAll=false)

{

wchar_tszTemp[MAX_PATH],szFnLwr[MAX_PATH];

intindex=0;

wcscpy(szFnLwr,pszFn);

_wcslwr(szFnLwr);

for(inti=0;i<vecFT.size();++i)

{

wcscpy(szTemp,vecFT[i].szName);

_wcslwr(szTemp);

if(true==bMatchAll)

{

if(0==wcscmp(szTemp,szFnLwr))

{

if(index>=outComeLen)

returnindex;

outCome[index++]=i;

}

}

else

{

if(0!=wcsstr(szTemp,szFnLwr))

{

if(index>=outComeLen)

returnindex;

outCome[index++]=i;

}

}

}

}

FileNameAndTimeGetItemByID(intindex)

{

if((index>=0)&&(index<vecFT.size()))

returnFileNameAndTime(vecFT[index]);

}

};

constwchar_tFileOfDirectory::szDot[]=L".";

constwchar_tFileOfDirectory::szDotDot[]=L"..";

constwchar_tFileOfDirectory::cStar=L'*';

constwchar_tFileOfDirectory::cSlash=L'\';

void__stdcallentp3()//測試程序

{

FileOfDirectoryfod(L"E:\game");

intids[256]={0};

fod.SortByAccessTime();

intlen=fod.FindFilesByKeyWord(L"main",ids,256);

for(inti=0;i<len;++i){

FileNameAndTimefnt(fod.GetItemByID(ids[i]));

CDbgString::OutputDbgStringW(L" %s%s",fnt.szPath,fnt.szName);

}

}

測試結果如圖所示。

B. linux下C語言怎麼獲取文件創建時間

在 Windows 下,一個文件有創建時間、修改時間、訪問時間。而在 Linux 下,一個文件也有三種時間,分別是訪問時間(Access)、修改時間(Modify)、狀態改變時間(Change)。

可以使用 stat 命令查看文件的訪問時間、修改時間和狀態改變時間。

本人使用的機器的磁碟分區使用的文件系統類型是 ext3,也就是說本人是無法查看文件創建時間的。但是,如果文件創建後就沒有修改過,修改時間=創建時間;如果文件創建後,狀態就沒有改變過,那麼狀態改變時間=創建時間;如果文件創建後,沒有被讀取過,那麼訪問時間=創建時間,當這個基本不太可能。

那什麼時候訪問時間,修改時間和狀態改變時間會變化呢?比如我們使用vi打開文件但不編輯,那麼退出後文件的訪問時間就會改變;比如我們使用vi打開文件並且編輯後保存退出,那麼文件的修改時間就會改變,當然訪問時間也改變了;再比如使用chmod +x給文件增加可執行的屬性,那麼文件的狀態改變時間就會改變。

【答題不易,請採納謝謝】

C. c語言如何判斷一個文件是否被修改

可以用 文件狀態 ,例如 文件建立時間,文件最後一次修改時間,文件最後一次被訪問的時間,做判斷。
獲取文件狀態用:
#include <io.h>
int get_namein_time(char *namein, char * ftime){
struct _finddata_t fileinfo;
int res,DEBUG=0,flag=0;
if ( (res = _findfirst(namein, &fileinfo)) == -1){
if (DEBUG==1) printf("get file info error !\n");
return 0;
};
if ( strcmp(namein,fileinfo.name)==0 ) {
flag=1; goto Lab;
}
do {
if ( strcmp(namein,fileinfo.name)==0 ) {flag=1;goto Lab;}
} while ( _findnext(res, &fileinfo) ==0);
Lab: strcpy(ftime,ctime(&fileinfo.time_write));
_findclose(res);
return flag;
}

最可靠的是用文件的哈希碼判斷,就是區塊鏈中用的方法。
例如視窗系統,調用系統 Certutil 計算出 文件的 哈希碼,與文件原來的碼對比。若變了,就是被修改了。
Certutil -hashfile abc.txt MD5 這個檢查 文件 abc.txt
Certutil -hashfile XYZ.txt SHA512 這個檢查 文件 XYZ.txt

D. C語言如何獲取文件信息stat這個函數如何使用 - C / C++ -

再給你一個例子吧[ol][*]#include [*]#include [*]#include [*]#include [*][*]int main(void)[*]{[*]? ?struct _stat buf;[*]? ?int result;[*][*]? ?/* Get data associated with \"filename.c\": */[*]? ?result = _stat(\"filename.c\", &buf); [*][*]? ?/* Check if statistics are valid: */[*]? ?if(result != 0)[*]? ?? ?perror(\"Problem getting information\");[*]? ?else[*]? ?{[*]? ?? ?/* Output some of the statistics: */[*]? ?? ?printf(\"File size? ???: %ld\\n\", buf.st_size);[*]? ?? ?printf(\"Drive? ?? ?? ?: %c:\\n\", buf.st_dev + \'A\');[*]? ?? ?printf(\"Time modified : %s\", ctime( &buf.st_atime));[*]? ?}[*][*]? ?return 0;[*]}[/ol]

熱點內容
sql2005加密 發布:2024-11-27 08:32:11 瀏覽:740
安卓手機如何鎖屏錄像 發布:2024-11-27 08:31:14 瀏覽:98
wms源碼 發布:2024-11-27 08:30:25 瀏覽:3
華為編譯器系列 發布:2024-11-27 08:29:42 瀏覽:854
長江存儲上海 發布:2024-11-27 08:29:31 瀏覽:328
crm客戶管理系統源碼 發布:2024-11-27 07:59:26 瀏覽:363
匠辰app安卓在哪裡下載 發布:2024-11-27 07:47:12 瀏覽:731
sql表操作 發布:2024-11-27 07:46:31 瀏覽:813
雲頂之腳本 發布:2024-11-27 07:45:37 瀏覽:658
編程箴言pdf 發布:2024-11-27 07:43:59 瀏覽:369