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

7

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

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

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


我理解你要求我翻译的是关于编程的内容。这段文字讲述了作者尝试了很多方法,但是他对那些他没尝试过的方法很感兴趣。然而,他使用的其中一种方法(下文提到的Trinet)是有问题的,因为他没有创建“基础”文件就试图保存备用流。以下是作者尝试过的代码库链接:

https://dev59.com/33RB5IYBdhLWcg3wgHWr - Robert Harvey
请在您的问题中包含一些您尝试过的方法的链接以及它们为什么失败。否则,我们只会向您引用相同的失败方法。 - Robert Harvey
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();
}

1
只有当您知道如何做时,它才是简单的 :) 谢谢,EvilPenguin!我尝试了Trinet的解决方案,但使用了错误的方法,因为该库似乎已经自CodeProject示例编写以来发生了变化。另外,我在创建"基本"文件之前创建了备用流,这可能会有问题。无论如何,现在它可以工作了! - user553671

2

你的库支持使用“\?\”替代语法时路径长度大于260。Trinet的库在这方面会失败。 - Teoni Valois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接