請問如何取得檔案之建立時間!! |
尚未結案
|
reywwu
一般會員 發表:1 回覆:2 積分:0 註冊:2004-09-21 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
您好:
可以參考下面連結
http://delphi.ktop.com.tw/topic.php?topic_id=35878 順心
|
reywwu
一般會員 發表:1 回覆:2 積分:0 註冊:2004-09-21 發送簡訊給我 |
taishyang 大哥你好:
我有參考gemi0305所發表的內容下
---------------------------------------
這裡有個小範例,
改寫自C Builder & Windows API 範例辭典
文魁出版社~
在form上加一個button、一個opendialog,一個memo void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString FName;
if(OpenDialog1->Execute())
FName=OpenDialog1->FileName; HANDLE fo = ::CreateFile(FName.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,NULL,
OPEN_EXISTING,
FILE_FLAG_WRITE_THROUGH,
NULL); BY_HANDLE_FILE_INFORMATION fd;
if(::GetFileInformationByHandle(fo, &fd))
{ Memo1->Lines->Add("建立時間(L):" AnsiString((int)fd.ftCreationTime.dwLowDateTime));
Memo1->Lines->Add("建立時間(H):" AnsiString((int)fd.ftCreationTime.dwHighDateTime));
Memo1->Lines->Add("最後存取時間(L):" AnsiString((int)fd.ftLastAccessTime.dwLowDateTime));
Memo1->Lines->Add("最後存取時間(H):" AnsiString((int)fd.ftLastAccessTime.dwHighDateTime));
Memo1->Lines->Add("最後寫入時間(L):" AnsiString((int)fd.ftLastWriteTime.dwLowDateTime));
Memo1->Lines->Add("最後寫入時間(H):" AnsiString((int)fd.ftLastWriteTime.dwHighDateTime));
Memo1->Lines->Add("檔案大小(H):" AnsiString((int)fd.nFileSizeHigh));
Memo1->Lines->Add("檔案大小(L):" AnsiString((int)fd.nFileSizeLow));
}
}
-------------------------------------------------------------
但我依上述所取得的檔案資料如下
===============================
建立時間(L):-200325678
建立時間(H):29661742
最後存取時間(L):-570470000
最後存取時間(H):29663749
最後寫入時間(L):-165013178
最後寫入時間(H):29661742
檔案大小(H):0
檔案大小(L):9437238
===============================
不好意思,我並不是很了解程式內容,所以不知道該怎麼去修改使輸出格式能轉換成(年、月、日),(時、分、秒)
還有這個程式似乎不能讀取*.raw的檔案,不知是否有解決的方法呢?? 還得麻煩各位大哥了~謝謝
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
reywwu你好:
taishyang版主的做法可以得到最後寫入的時間。但如果你需要取得建立時間,或存取時間的話,可以參考下面的碼…是我自已包裝的程式庫的一部分。
class FileTimeX{ protected: __int64 Date; protected: void Copy(const FileTimeX& rhs){Date = rhs.Date;} public: FileTimeX(){} FileTimeX(__int64 rhs){Date = rhs;} FileTimeX(const FILETIME& rhs){Date = *(__int64*)&rhs;} FileTimeX(const FileTimeX& rhs){Copy(rhs);} FileTimeX& operator=(const FileTimeX& rhs){Copy(rhs);return *this;} public: bool operator>(const FileTimeX& rhs) const //first is later {return CompareFileTime((FILETIME*)&Date,(FILETIME*)&rhs.Date) == 1;} bool operator<(const FileTimeX& rhs) const // last is later {return CompareFileTime((FILETIME*)&Date,(FILETIME*)&rhs.Date) == -1;} bool operator==(const FileTimeX& rhs) const {return CompareFileTime((FILETIME*)&Date,(FILETIME*)&rhs.Date) == 0;} operator FILETIME() const {return *(FILETIME*)&Date;} operator TDateTime() const { LongRec Result; TFileTime LocalFileTime; FileTimeToLocalFileTime((const _FILETIME*)&Date,&LocalFileTime); FileTimeToDosDateTime(&LocalFileTime,&(Result.Hi),&(Result.Lo)); return FileDateToDateTime(*(int*)&Result); } }; //--------------------------------------------------------------------------- bool FileGetDate(const AnsiString& FileName, FileTimeX* CreateTime, FileTimeX* LastAccessTime, FileTimeX* LastWriteTime) { bool Result; THandle FileHandle; if((FileHandle = FileOpen(FileName, fmOpenRead)) == THandle(-1)) return false; Result = GetFileTime((void*)FileHandle, (FILETIME*)CreateTime, (FILETIME*)LastAccessTime, (FILETIME*)LastWriteTime); FileClose(FileHandle); return Result; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FileTimeX CreateTimeOfFile; // 用法:FileGetDate(FileName,CreateTime,LastAccessTime,LastWriteTime) if(FileGetDate("c:\\temp.txt",&CreateTimeOfFile,0,0)) //如果不需要知道其他的時間,就傳0 { Caption = TDateTime(CreateTimeOfFile).TimeString(); //時間 Caption = TDateTime(CreateTimeOfFile).DateString(); //日期 Caption = FormatDateTime("dddddd ampm hh:nn:ss",CreateTimeOfFile); //格式化 } } //--------------------------------------------------------------------------- |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
reywwu:幾位大大提供精彩的說明,我也來插花一下。 我喜歡使用WIN32_FIND_DATA結構,定義如下: typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; // 文件屬性 FILETIME ftCreationTime; // 文件創建時間 FILETIME ftLastAccessTime; // 文件最後一次訪問時間 FILETIME ftLastWriteTime; // 文件最後一次修改時間 DWORD nFileSizeHigh; // 文件長度高32位 DWORD nFileSizeLow; // 文件長度低32位 DWORD dwReserved0; // 系統保留 DWORD dwReserved1; // 系統保留 TCHAR cFileName[ MAX_PATH ]; // 長檔案名 TCHAR cAlternateFileName[ 14 ]; // 8.3格式檔案名(DOS) } WIN32_FIND_DATA, *PWIN32_FIND_DATA; 你看幾乎文件格式都在裡面。我依你的需要舉一例子: #includeAndy Chang
------
Andy Chang |
reywwu
一般會員 發表:1 回覆:2 積分:0 註冊:2004-09-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |