[問題] 替檔案設定時間

看板C_and_CPP作者 (懶)時間16年前 (2009/11/18 11:06), 編輯推噓5(5014)
留言19則, 3人參與, 最新討論串1/1
我嘗試幫複製出來的檔案設定時間 但是只要碰到有"唯讀"屬性的檔案 複製出來的檔案時間設定就會不對 時間不會是我要的 而是被複製出來的時間 下面是code 請問可能是哪邊出錯?@@ 感謝! HANDLE hFileOld, hFileNew; FILETIME OCreateTime, OLastAccessTime, OLastWriteTime; const FILETIME *NCreationTime, *NLastAccessTime, *NLastWriteTime; hFileOld = CreateFile(cOldPathName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); hFileNew = CreateFile(cNewPathName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //設定時間 GetFileTime(hFileOld, &OCreateTime, &OLastAccessTime, &OLastWriteTime); NCreationTime = &OCreateTime; NLastAccessTime = &OLastAccessTime; NLastWriteTime = &OLastWriteTime; SetFileTime(hFileNew, NCreationTime, NLastAccessTime,NLastWriteTime); CloseHandle(hFileNew); CloseHandle(hFileOld); -- ╔╮ ╭═╦╮╭═╦╗╮ ╮╔══╮╭═╦╮╮ ╔╮╔══╮╭══╮ ╠╣ ╠═╬╣╭╬╩╯╰╦╦╯╠═╦╮║ ╠╣║║╠╣╠╣ ╰═╦╮ ╠╣ ╭║ ╠╣║╰╔╗ ╠╣ ║ ╠╣║ ╠╣║╰╠╣║╰╔╗║ ╠╣ ╰╩═╯╰ ╰╝╚═╩╯ ╰╝ ╚═╩╯╰═╩╯╰ ╰╝╚═╩╯╰═╩╯ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.211.0.80

11/18 11:18, , 1F
SetFileTime 得要有 FILE_WRITE_ATTRIBUTES
11/18 11:18, 1F

11/18 11:19, , 2F
唯讀檔案應該是沒辦法改的
11/18 11:19, 2F

11/18 11:25, , 3F
謝謝!那唯讀檔案有function能處理嗎?
11/18 11:25, 3F

11/18 11:35, , 4F
用 SetFileAttributes 拿掉唯讀權限? 如果不能拿就沒法了
11/18 11:35, 4F

11/18 11:54, , 5F
這應該跟OS檔案系統有關了吧?? 在Linux下沒有w權限的檔
11/18 11:54, 5F

11/18 11:54, , 6F
檔案應該也不能touch吧....?_?
11/18 11:54, 6F
謝謝!我OS是MS XP 然後複製檔案部分是自己用fopen()開2個 分別讀跟寫 所以新檔案在設定屬性之前 應該也沒有"唯讀"屬性 不過就算先設時間 再給屬性 時間還是一樣不對 Orz ※ 編輯: lazybones 來自: 218.211.0.80 (11/18 13:03)

11/18 13:14, , 7F
Windows下有Created時間與Modified時間, 一般我們直接
11/18 13:14, 7F

11/18 13:15, , 8F
Copy file, 解壓縮, 安裝檔案等時, Created的時間都是當
11/18 13:15, 8F

11/18 13:16, , 9F
下操作的時間, Modifed才會是原來檔案最後修改的時間;
11/18 13:16, 9F

11/18 13:16, , 10F
小弟覺得這就是OS檔案系統的行為, 在這邊你去搞唯讀什麼
11/18 13:16, 10F

11/18 13:17, , 11F
的應該沒什麼用; 不曉得為什麼您要care這個時間的問題.
11/18 13:17, 11F

11/18 13:17, , 12F
PS. 小弟也是XP, 就算不是唯讀, 複製時Created時間都是
11/18 13:17, 12F

11/18 13:17, , 13F
當下的@_@"
11/18 13:17, 13F

11/18 13:18, , 14F
PS2.唯讀檔案, 複製完Modified時間也不會變, 補充一下:)
11/18 13:18, 14F

11/18 13:19, , 15F
如果WindowsAPI沒有提供修改的方式, 而您又真的想弄到一
11/18 13:19, 15F

11/18 13:19, , 16F
模一樣, 感覺就要跨過OS檔案系統才辦得到, 以上純猜測XD
11/18 13:19, 16F

11/18 14:06, , 17F
謝謝!我問題就出在Modified時間(LastWriteTime?)不對
11/18 14:06, 17F

11/18 14:07, , 18F
為啥要care...因為是作業要求 哈!感謝l大 V大
11/18 14:07, 18F
唔...搞定了= = 我後來在做複製之前先做以下處理 dwAttributes = GetFileAttributes(cOldPathName); //取得cOldPathName屬性 SetFileAttributes(cOldPathName, 0); //把cOldPathName屬性設成一般 做完複製之後 SetFileAttributes(cOldPathName, dwAttributes); //設成原來屬性 這樣就沒有我之前的問題了 囧> ※ 編輯: lazybones 來自: 218.211.0.80 (11/18 14:59)

11/18 16:30, , 19F
沒錯~ 先去掉唯讀, 改好時間之後再加回來, 不過這要求怪怪XD
11/18 16:30, 19F
文章代碼(AID): #1B0sIijX (C_and_CPP)