7

構築中のデータベース アプリケーションで参照されるファイルの同期情報を格納するために、別のデータ ストリームを使用できるようにしたいと考えています。

しかし、私が Web で見つけたすべてのアプローチは、何らかの形で失敗しています。Win32 API プログラミングの経験がないため、エラーが発生する理由がわかりません。メソッド呼び出しが成功したように見えても、代替ストリームが作成されない場合があります (つまり、後で代替ファイルから読み取ることも、AlternateStreamViewer がそれを見ることもできません)。それ以外の場合、書き込みは成功しますが、CreateFile() を呼び出すと SafeFileHandle が無効になるため、読み取りは失敗します。

この時点で、機能するコードを見つけたいと思います。または、「あなたはここからそこに着くことができません」とアドバイスされます。その場合は、あまり魅力的でない別のオプションを使用します (たとえば、同期/参照情報をファイル名自体にエンコードし、誰もファイル名を変更しないことを望みます)。


私が試したアプローチについてのリクエストを理解しています。しかし、かなりの数があり (私はこれに何時間も費やしました)、試したことのない製品について学ぶことに本当に興味がありました。

しかし、私がアプローチの 1 つ (以下で言及されている 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

NTFS 代替データ ストリームの一覧表示、読み取り、書き込みをわずか数行のコードでサポートする、私の Platform.VirtualFileSystem ライブラリを試すこともできます。

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

于 2013-05-26T16:25:08.240 に答える