2015-01-14 7 views
0

시나리오 : 시스템에 언제든지 번을으로 바꾼 파일이 있습니다. 모든 변경 사항을 기록해야합니다.DBMS와 같은 격리 수준으로 파일을 업데이트하는 방법은 무엇입니까?

해결 방법 : IO.FileSystemWatcher를 사용하여 변경 사항을 기록하고 사용자가 새 파일을 업로드하면 이전 파일의 이름을 타임 스탬프와 도메인 사용자 이름으로 변경하여 고유하게 만듭니다.

내 문제는 : 누군가가 너무 빨리 교체하면 프로그램이 응답 할 수 없으며 다음 교체 전에 일부 항목의 이름을 바꾸지 못할 것입니다.

내 생각은 : 잠금 기반 동시성 제어 DBMS를 사용하면 커밋으로 트랜잭션을 실행할 수 있습니다. 파일 시스템에서 동일한 작업을 수행 할 수 있다면 어떻게 될까요? 프로그램을 실행할 때 파일을 잠글 수 있고 "커밋"이후에 해제 할 수 있습니까? 가능하다면 어떻게 할 수 있습니까?

I는 .NET 프레임 워크를 기반으로, PowerShell을 사용하여 구현 해요 :

Register-ObjectEvent $FileWatcher "Changed" -Action { 
Add-content "C:\Projects\user_watching\log.txt" -value $(Get-Date -format yyyyMMddHHmmss) 
Copy-Item "C:\Projects\user_watching\UserProfile.xml" "C:\Projects\housekeep\"$DomainUser"UserProfile"$(Get-Date -format yyyyMMddHHmmss)".xml" 
} 

참조 링크를은 FileSystemWatcher 클래스에 대해 :

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx

+1

NTFS와 FAT는 트랜잭션이 가능하도록 설계되지 않았지만 Longhorn은 그 10 년 후에도 실패 할 시도를했습니다. 따라서 ACID를 자체적으로 수행 할 수없는 ACID를 구현하려는 시도는 거의 확실합니다. –

+0

방금이 관련 cmdlet을 발견 했으므로 Copy-Item을 필사적으로 사용할 수는 있지만 프로그램의 일부가 아닌 대체 COZ에서는 사용할 수 없습니다. http://technet.microsoft.com/en-us/library/hh847861.aspx – Alan

답변