MS

USB 파일 복사시 Lastwritetimeutc 에 차이가 나는 생기는 원인

콩메모 2024. 1. 4. 13:37

파일에서 마우스 우클릭해서 속성에 들어가면 파일이 언제 만들어졌는지, 언제 마지막으로 수정되었는지에 대한 정보를 볼 수 있다.

그런데, 꼭같은 파일이어도 디스크의 포맷방식에 따라 저장되는 시간이 달라질 수 있으므로, 프로그래밍시 이 시간정보를 이용할 경우 조심해야 될 내용으로 생각이 된다.

구글 드라이브로 소스파일들을 동기화하여 회사와 집에서 작업을 주로 하는데, 어느날 집에서 작업한 파일이 동기화가 되어 있지 않음을 우연히 확인하고 실제 작업경로를 동기화 폴더로 사용하기에는 위험부담이 있다는 것을 느꼈다.

그래서, 간단한 폴더 백업툴을 만들어 D드라이브와 USB에 동시에 백업하는 프로그램을 만들었다.

복잡한 로직을 사용한 것은 아니고, 그냥 파일이 없어졌으면 백업본에서 지우고, 파일이 새로 생긴것은 그냥 파일복사... 파일이 변경되었으면 변경본을 덮어쓰고..

이런 세가지 기준으로 백업을 하도록 하였다.

그런데... 없어진거나 새로 만들어진 파일같은 경우에는 별 문제가 없는데...

변경내용을 판단하는 부분이 오동작을 일으켰다..

파일이 변경되었는지를 판단하는 기준으로 Lastwritetimeutc 값을 사용했는데...

실제 복사된 결과를 보니... D에 저장된 파일과 USB에 저장된 파일의 Lastwritetimeutc 값이 1초 차이가 나는 것이었다.

이렇게 시간이 다르게 복사가 되다보니 매번 모든 파일을 다시 백업을 시도하게 된 것이다.

수정된 파일만 복사해야 되는데 말이다...

원인을 찾다보니 다음과 같이 파일 포맷에 따른 타임스템프값의 차이로 인한 것임을 알 수 있었다.

NTFS에서는 파일이 저장될 때 타임스템프값이 100나노초에서 반올림이 된 값이 저장이 되고,

FAT에서는 짝수로 반올림이 된다고 한다. ( 정확한 의미는 모르겠다. )

결론은... 파일포맷이 다르면 Lastwritetimeutc 값으로는 파일이 변경되었는지 아닌지에 대한 판단 근거로 사용하기에는 무리가 있다는 것이다.

( 물론, 사람이 작업하는 파일이라면 1초차이나는 것은 같다고 가정하면 되겠지만.. )

아무튼... 소스상으로 편법을 써서 처리해보려다... 그냥 USB를 NTFS로 포맷을 하여 다시 해보니 Lastwritetimeutc값이 원본과 동일하게 나온다.

'MS' 카테고리의 다른 글

MSSQL 백업/복구 정리  (1) 2024.01.04
C# 텔레그램 메시지 보내기(No 라이브러리)  (1) 2024.01.04
system32폴더와 syswow64폴더  (2) 2024.01.04