我希望能够使用备用数据流来存储我正在构建的数据库应用程序中引用的文件的某些同步信息.
但是,我在网上找到的每种方法都以这种或那种方式失败了.在Win32 API编程中没有经验我不确定为什么会发生故障.在某些情况下,方法调用似乎成功,只创建了备用流(即,我以后不能从备用文件中读取,AlternateStreamViewer也不能看到它).在其他情况下,写入成功,但读取失败,因为调用CreateFile()会导致无效的SafeFileHandle.
在这一点上,我只想找到一些工作代码.或者被告知“你不能从这里到达那里”.在这种情况下,我将使用另一个不太吸引人的选项(例如,编码文件名本身的同步/参考信息,并希望没有人更改文件名).
我理解我尝试过的方法的要求.但是有很多(我花了几个小时),我真的很想学习我没有尝试过的产品.
但是,你是对的,它会有所帮助,因为事实证明我正在使用其中一种方法 – 下面提到的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(); }