用代碼取得檔的創建時間,完成後為什麼檔不能釋放? |
答題得分者是:andychang1690
|
jean2004
初階會員 發表:69 回覆:80 積分:39 註冊:2004-12-18 發送簡訊給我 |
各位先輩,我的這個代碼執行後除非關閉程式,否則檔始終處於被獨佔打開的狀態,百思不得其解,不知道問題在那裏?我的代碼如下:
//自定義函數:編寫人jean AnsiString iFileTime(AnsiString iFilePath, int iOrder)//1=創建時間;2=修改時間;3=最後訪問時間 {//取得檔的創建時間、修改時間和最後訪問時間: AnsiString iReturn;//返回值 int hf=FileOpen(iFilePath.c_str(),fmOpenRead); FILETIME fct,fat,fwt;//CreationTime,LastAccessTime,LastWriteTime FILETIME lft;//本地時間 TSystemTime st; ZeroMemory(&fct,sizeof(fct));//初始化 ZeroMemory(&fat,sizeof(fat)); ZeroMemory(&fwt,sizeof(fwt)); ZeroMemory(&lft,sizeof(lft)); GetFileTime((void *)hf,&fct,&fat,&fwt);//取檔時間 TDateTime dt; if(iOrder==1) { //創建時間 FileTimeToLocalFileTime(&fct,&lft);//轉換為本地時間 FileTimeToSystemTime(&lft,&st);//先轉換成系統時間再轉換成TDateTime類型 dt=SystemTimeToDateTime(st); //ShowMessage("檔創建時間:" dt.DateTimeString()); return dt.DateTimeString();//返回值 } if(iOrder==3) { FileTimeToLocalFileTime(&fat,&lft);//訪問時間 FileTimeToSystemTime(&lft,&st); dt=SystemTimeToDateTime(st); //ShowMessage("檔最後訪問時間:" dt.DateTimeString()); return dt.DateTimeString();//返回值 } if(iOrder==2) { FileTimeToLocalFileTime(&fwt,&lft);//修改時間 FileTimeToSystemTime(&lft,&st); dt=SystemTimeToDateTime(st); //ShowMessage("檔最後修改時間:" dt.DateTimeString()); return dt.DateTimeString();//返回值 //FileClose(hf); } FileClose(hf); } bool IsFileInUse(String FileName) {//測試檔是否被以獨佔方式打開 bool Result; HANDLE Handle = CreateFile(FileName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); Result = INVALID_HANDLE_VALUE == Handle; if(!Result)CloseHandle(Handle); return Result; } void __fastcall TForm1::Button1Click(TObject *Sender) {//1=創建時間;2=修改時間;3=最後訪問時間 AnsiString iFile="C:\\SiSSetup.txt"; if(IsFileInUse(iFile)==true) Edit1->Text="檔被以獨佔方式打開,不能取得正確的時間!"; else Edit1->Text=iFileTime(iFile, 1); }發表人 - jean2004 於 2005/07/01 17:52:43 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
jean2004
初階會員 發表:69 回覆:80 積分:39 註冊:2004-12-18 發送簡訊給我 |
|
jean2004
初階會員 發表:69 回覆:80 積分:39 註冊:2004-12-18 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
jean2004: 一:請至 http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=37623 發表文章數: 37 觀看發表文章明細進入後是有十篇文章未結。 二:請注意你 AnsiString iFileTime(AnsiString iFilePath, int iOrder)//1=創建時間;2=修改時間;3=最後訪問時間 { int hf=FileOpen(iFilePath.c_str(),fmOpenRead); //開檔 ... if(iOrder==1) { ... return dt.DateTimeString();//返回值 //符合上述條件返回並沒有關檔。 } if(iOrder==2) { ... return dt.DateTimeString();//返回值 //符合上述條件返回並沒有關檔。 } if(iOrder==3) { ... return dt.DateTimeString();//返回值 //符合上述條件返回並沒有關檔。 } FileClose(hf); //不符合上述條件你才執行關檔。 //但卻沒有返回值? } 請參考!Andy Chang
------
Andy Chang |
jean2004
初階會員 發表:69 回覆:80 積分:39 註冊:2004-12-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |