 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 1 樓
|
發表於: 星期六 四月 24, 2004 12:19 pm 文章主題: 使用 WIN API 更改檔案建立修改日期 |
|
|
DECLARE INTEGER GetLastError IN kernel32 && 如果有錯誤的話可用這個 api 取得錯誤訊息
DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject && 宣告關閉檔案
DECLARE GetSystemTime IN kernel32 STRING @lpSystemTime && 取得系統日期
&& 把系統日期轉成檔案日期,在api中系統日期和檔日期的格式不同
DECLARE INTEGER SystemTimeToFileTime IN kernel32;
STRING @ lpSystemTime, STRING @ lpFileTime
DECLARE INTEGER SetFileTime IN kernel32; && 寫入新日期
INTEGER hFile, ;
STRING @lpCreationTime,; && 檔案建立時間
STRING @lpLastAccessTime, ;&& 最後寫入時間
STRING @lpLastWriteTime && 最後存取時間
DECLARE INTEGER OpenFile IN kernel32; && 開啟檔案
STRING lpFileName, STRING @lpReOpenBuff,;
INTEGER wStyle
lcFileTime = REPLI (Chr(0), 8 ) && 宣告成檔案日期
lcSystemTime = REPLI (Chr(0), 16) && 系統日期
= GetSystemTime (@lcSystemTime) && 取得系統日期
= SystemTimeToFileTime (@lcSystemTime, @lcFileTime) && 轉成檔案日期
lcFile = "c:DEFSTRUCT.BAK" && 要處理的檔案名稱
lcBuff = REPLI (Chr(0), 250)
hFile = OpenFile (lcFile, @lcBuff, 1) && 開檔
IF hFile > 0 && 檢查是否開成功
= SetFileTime (hFile, @lcFileTime, @lcFileTime, @lcFileTime) && 寫入至檔案
= CloseHandle (hFile) && 關閉檔案
ELSE
MESSAGEbox("錯誤: "+GetLastError(),0+16,"錯誤!...")
ENDIF _________________ 利用>>搜尋<<的功能會比問的還要快得到答案.
garfield 在 星期三 八月 04, 2004 11:01 pm 作了第 1 次修改 |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 2 樓
|
發表於: 星期三 八月 04, 2004 5:53 pm 文章主題: |
|
|
請問前輩,
= GetSystemTime (@lcSystemTime) && 取得系統日期
我不要以系統日期 而要以 取得其它檔案日期 或自已定義日期,寫入檔案的日期
上述的範例的我測試了,可以 c:DEFSTRUCT.BAK 的日期改成系統日期,但如果要把日期改成 2000.01.01 應如何,拜託前輩 |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 3 樓
|
發表於: 星期三 八月 04, 2004 11:17 pm 文章主題: |
|
|
從msdn查的
SYSTEMTIME
The SYSTEMTIME structure represents a date and time using individual members for the month, day, year, weekday, hour, minute, second, and millisecond.
typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
Members
wYear
The year (1601 - 30827).
wMonth
The month.
January = 1
February = 2
March = 3
April = 4
May = 5
June = 6
July = 7
August = 8
September = 9
October = 10
November = 11
December = 12
wDayOfWeek
The day of the week.
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
wDay
The day of the month (0-31).
wHour
The hour (0-23).
wMinute
The minute (0-59).
wSecond
The second (0-59).
wMilliseconds
The millisecond (0-999).
*************************
所以要自己寫個轉換程式
func date2system
lpara mdatetime
local mret
mret = ''
mret = mret + num2word( year( mdatetime ))
mret = mret + num2word( month( mdatetime ))
mret = mret + num2word( dow( mdatetime ))
mret = mret + num2word( day( mdatetime ))
mret = mret + num2word( val(subs( ttoc(mdatetime,1),9,2) )- &&--taiwan AREA +0800, 因為時區的關係所以要-8,但在早上8點前就不適用,請自行想方法解決
mret = mret + num2word( val(subs( ttoc(mdatetime,1),11,2) ))
mret = mret + num2word( val(subs( ttoc(mdatetime,1),13,2) ))
mret = mret + chr(0)+chr(0)
return mret
******
FUNCTION num2word (lnValue)
RETURN CHR(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256)) _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 4 樓
|
發表於: 星期三 八月 04, 2004 11:49 pm 文章主題: |
|
|
感謝前輩的解答,雖然看不太懂,但已解決我的問題,再度的感謝 |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 5 樓
|
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|