생성된 파일마다 고유한 값은 어떤것이 있을까요?
글쓴이: yjc99 / 작성시간: 금, 2009/05/08 - 2:34오후
윈도우에서(XP이상) 파일의 고유한 값으로 참조할만한 것이 어떤것이 있을까요?
단 파일이름이나 일반적인 속성같이 사용자가 변경가능한것은 안되고, 파일이 생성되었을때 (중간에 사용자가 파일이름이나 속성을 맘대로 바꾼다고 해도) 파일이 삭제될때까지 계속 동일하게 유지될수 있는 값이어야 합니다.
파일속성중에는 유일하게 CreateTime 이 바로 적합한데, 문제는 동시에 생성할시 동일한값을 가질수 있다는 것입니다.
어떤 식으로든 파일이 삭제되기까지 , 파일마다 유일한 값을 붙여야 하는데 , 도저히 방법이 없네요.
Forums:
두가지 정도로
내용을 참고해 보세요.
1.GUID생성
http://www.codeguru.com/forum/showthread.php?t=280300
2.Hash생성
http://www.codeproject.com/KB/security/HashingCryptoAPI.aspx
음.. 쉽지않겠는데요.
CreateTime은 말씀하신대로 동시발생 문제가 있고
심지어는 속성 편집으로 그것도 변경이 가능합니다. 어차피 그것도 어딘가에 기록된 데이터에 불과하니까요.
해시값은 파일 내용이 변할경우 같이 따라서 변하겠지요..
따라서 해시값을 쓴다면 파일내용이 변경될때마다 변경내역을 기록해야만 탐색 등에 이용할 수 있을겁니다.
GUID의 경우에는 차후에 남이 그것을 변경할 수 없어야 한다는 보장이 있어야 하고
직접 생성하지 않은 파일에는 붙이기 힘들다는 문제가 있지요. 따로 관리한다 한들 사용자가 임의로 바꿔치기할 수 있으니까요.
속성과 이름 외에 파일내용을 남이 변경하지 못한다는 보장이 있다면 아무거나 쓸 수 있겠네요..
그렇지 않다면 좀 골치가 아파지겠고..
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
GetFileInformationByHandle
유닉스의 inode 같은 값을 원하시는 것이 맞나요?
잠시 찾아보니 GetFileInformationByHandle 이라는 함수를 사용하면 된다고 하네요. 아래는 MSDN에서 찾은 내용입니다.
http://msdn.microsoft.com/en-us/library/aa364952.aspx
You can compare the VolumeSerialNumber and FileIndex members returned in the BY_HANDLE_FILE_INFORMATION structure to determine if two paths map to the same target; for example, you can compare two file paths and determine if they map to the same directory.
http://msdn.microsoft.com/en-us/library/aa363788.aspx
The identifier that is stored in the nFileIndexHigh and nFileIndexLow members is called the file ID. Support for file IDs is file system-specific. File IDs are not guaranteed to be unique over time, because file systems are free to reuse them. In some cases, the file ID for a file can change over time.
In the NTFS file system, a file keeps the same file ID until it is deleted. You can replace one file with another file without changing the file ID by using the ReplaceFile function. However, the file ID of the replacement file, not the replaced file, is retained as the file ID of the resulting file.
오.. 이거 멋진데요.
VC의 도움말에는 저 영역에
Note that this value is useful only while the file is open by at least one process. If no processes have it open, the index may change the next time the file is opened.
란 말이 있었는데.. 최신판에선 삭제가 됐군요! 대신 적어주신 NTFS에서는 지워질때까지 유지된다는 부분이 추가됐군요.. 굿 굿 베리 굿! 좋은거 배워 갑니다 *^^*
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
댓글 달기