.net 如何使用像DBMS这样的隔离级别更新文件?

.net 如何使用像DBMS这样的隔离级别更新文件?,.net,database,powershell,.net,Database,Powershell,场景:我在系统中有一个文件,用户将随时替换它,我需要记录他们所做的每一次更改 解决方案:我正在使用IO.FileSystemWatcher记录更改,一旦用户上传新文件,它将使用时间戳和域用户名重命名旧文件,使其唯一 我的问题是:如果有人更换得太快,程序将无法响应,并且在下次更换之前将无法重命名某些项目 我的想法是:使用基于锁的并发控制DBMS,事务可以通过提交运行。如果我可以在文件系统中执行同样的操作呢?我们可以在运行程序时锁定文件,并在“提交”后释放它吗?如果可以,我怎么做 我正在使用基于.N

场景:我在系统中有一个文件,用户将随时替换它,我需要记录他们所做的每一次更改

解决方案:我正在使用IO.FileSystemWatcher记录更改,一旦用户上传新文件,它将使用时间戳和域用户名重命名旧文件,使其唯一

我的问题是:如果有人更换得太快,程序将无法响应,并且在下次更换之前将无法重命名某些项目

我的想法是:使用基于锁的并发控制DBMS,事务可以通过提交运行。如果我可以在文件系统中执行同样的操作呢?我们可以在运行程序时锁定文件,并在“提交”后释放它吗?如果可以,我怎么做

我正在使用基于.NET Framework的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类的参考链接:


听起来您试图实现的是互斥。如果您试图同步多个会话并避免竞争条件,那么这将是一种方法

以下是一个让您开始的链接: 确保两个PowerShell脚本不会同时运行

NTFS和FAT的设计目的不是为了实现事务性,尽管Longhorn在十年前曾尝试过这一点,但没有成功。因此,尝试在某些本身肯定不具备ACID功能的东西上实现ACID几乎肯定是非常重要的。我刚刚发现了这个相关的cmdlet,我可以使用复制项作为我的转换的一部分,但我无法在替换项上使用它,因为它不是我程序的一部分。