7

我希望能够使用备用数据流来存储我正在构建的数据库应用程序中引用的文件的一些同步信息。

然而,我在网上找到的每一种方法都以某种方式失败了。在 Win32 API 编程方面没有经验我不确定为什么会发生故障。在某些情况下,方法调用似乎成功了,只是没有创建备用流(即,我以后无法从备用文件中读取,也无法看到 AlternateStreamViewer)。在其他情况下,写入成功,但读取失败,因为调用 CreateFile() 会导致无效的 SafeFileHandle。

在这一点上,我只想找到一些工作代码。或者被告知“你不能从这里到达那里”。在这种情况下,我将使用另一种不太吸引人的选项(例如,在文件名本身中编码同步/参考信息,并希望没有人更改文件名)。


我了解我尝试了哪些方法的要求。但是有很多(我花了几个小时在这上面),而且我真的很想了解我没有尝试过的产品。

然而,你说得对,它会有所帮助,因为事实证明我使用的方法之一——下面提到的 Trinet 方法——不正确。我认为问题在于我尚未创建我试图为其保存备用流的“基础”文件。

以下是我尝试过的代码库的链接:

4

2 回答 2

7

我使用这个库在 Windows 7 x64 上取得了成功:

https://github.com/hubkey/Trinet.Core.IO.Ntfs

我找不到我的旧代码,并且我收藏的文档页面目前已关闭,因此如果您仍然遇到问题,我会在它备份时尝试发布一些代码。

编辑:显然它很简单:

using Trinet.Core.IO.Ntfs;

var fileInfo = new FileInfo(@"C:\path\to\file.dat");
if (AlternateDataStreamExists("MyStreamName"))
{
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenRead();
}
else
{
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenWrite();
}
于 2012-05-07T05:45:39.737 回答
2

你也可以试试我的 Platform.VirtualFileSystem 库,它只用几行代码就支持列出、读取和写入 NTFS 备用数据流。

https://github.com/platformdotnet/Platform.VirtualFileSystem/wiki https://github.com/platformdotnet/Platform.VirtualFileSystem/wiki/Alternate-Data-Streams

于 2013-05-26T16:25:08.240 回答