我希望能够使用备用数据流来存储我正在构建的数据库应用程序中引用的文件的一些同步信息。
然而,我在网上找到的每一种方法都以某种方式失败了。由于没有在win32 api编程方面的经验,我不确定为什么会发生故障。在某些情况下,方法调用似乎是成功的,只是没有创建备用流(即,我以后无法从备用文件中读取,alternatestreamviewer也无法看到它)。在其他情况下,写入成功,但读取失败,因为调用createfile()会导致无效的safefilehandle。
在这一点上,我只想找到一些工作代码。或者被告知“你不能从这里到那里”。在这种情况下,我将使用另一个不太吸引人的选项(例如,将同步/引用信息编码到文件名中,并希望没有人更改文件名)。
我理解我所尝试的方法的要求。但有很多(我花了几个小时在这上面),我真的很感兴趣的是学习我没有尝试过的产品。
不过,你说得对,这会有帮助,因为事实证明我使用了其中一种方法——下面提到的trinet方法——不正确。我想问题是我还没有创建“base”文件,我正试图为其保存一个备用流。
以下是我尝试的代码库的链接:
St. Croix Skipper
DevDump
Trinet

最佳答案

我在使用此库的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();
}

10-07 19:54