工作 C# 示例:在 Win7 64 位下写入和读取 NTFS 备用数据流



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

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

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


理解我尝试过什么方法的要求。但是有很多(我花了几个小时(,我真的很有兴趣了解我没有尝试过的产品。

然而,你是对的,它会有所帮助,因为事实证明我使用了其中一种方法 - 下面提到的Trinet方法 - 不正确。我认为问题是我还没有创建我试图为其保存备用流的"基本"文件。

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

  • 圣克罗伊船长
  • 开发转储
  • 三内特

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

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

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

编辑:显然,它就像

using Trinet.Core.IO.Ntfs;
var fileInfo = new FileInfo(@"C:pathtofile.dat");
if (AlternateDataStreamExists("MyStreamName"))
{
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenRead();
}
else
{
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenWrite();
}

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

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

最新更新