背景:
我知道这太问题有关事务性NTFS(TxF的)和本文介绍如何使用它,但我正在寻找现实世界的经验,具有相当高容量企业系统,其中大量的BLOB数据(比如文件和/或照片)需要在交易时保留并多次阅读.
问题:
相关问题:
编辑:为了更清楚,我已经研究了其他技术,包括SQL Server 2008的新FILESTREAM数据类型,但是这个问题仅针对事务文件系统.
更多资源:
我试图围绕在C#中使用System.Transactions命名空间.我在MSDN上找到了一些关于使用资源管理器的文档,但它只涵盖任何细节的易失性内存资源管理器(如Transactional).我基本上在寻找可以在TransactionScope中使用的东西,就像Transactional <>一样,但是用它来写入/修改/删除磁盘上的文件.标准库中是否存在类似的内容?我已经读过NTFS现在有"TxF"允许事务性文件系统访问 - 我期望在.net中找到一些利用它的东西.也许我需要实现自己的?
鉴于Microsoft已弃用Transactional NTFS(TxF):
Microsoft强烈建议开发人员使用其他方法来满足您的应用程序需求.可以通过更简单和更容易获得的技术来实现TxF开发的许多场景.此外,在未来的Microsoft Windows版本中可能无法使用TxF.
虽然TxF是一组功能强大的API,但自Windows Vista以来,开发人员对此API平台的兴趣非常有限,主要是由于其复杂性和开发人员在应用程序开发过程中需要考虑的各种细微差别.因此,Microsoft正在考虑在未来版本的Windows中弃用TxF API,以便将开发和维护工作集中在对大多数客户更有价值的其他功能和API上.
这意味着我需要一个替代方案:
我的交易要求相当简单 - 移动两个文件:
tx = BeginTransaction();
{
MoveFile(testResults, testResultsArchive); //throws if there's a problem
MoveFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
CommitTransaction(tx);
}
finally
{
CloseHandle(tx);
}
Run Code Online (Sandbox Code Playgroud)
我已经考虑过转向MoveFile到CopyFile+ DeleteFile:
CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
DeleteFile(testResults);
DeleteFile(cdcResponse);
Run Code Online (Sandbox Code Playgroud)
但我希望有一个好的解决方案,而不是一个错误的解决方案.所以我再试一次:
CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem …Run Code Online (Sandbox Code Playgroud) 我们有一个程序,安装程序会检查是否存在配置文件,如果存在,则不会复制该文件(它假定用户已修改其配置文件并希望保留这些修改).不幸的是,这是一个Vista之前的应用程序,它将配置文件保存在Program Files中.问题是,如果你在重新安装某个API时手动清除目录,仍然认为那里有一个目录.例如,VB6及其浏览文件对话框看到的文件夹,但是explorer,cmd shell等无法查看文件夹.对文件进行写入仍然会将旧文件(对于某些API,但不是资源管理器)留下,除了"浏览文件"对话框中的表单之外,该文件无法删除.
这些Phantom文件夹发生了什么,我们如何删除文件以便所有API看到相同的东西?也许它与TxF或搜索索引器有关,但我们使用的安装程序(InnoSetup)和部分应用程序(用VB6编写的部分)都看到了旧版本的文件,其他一切都看到了当前版本.