2012-05-07 6 views
6

私は構築しているデータベースアプリケーションで参照されているファイルの同期情報を格納するために代替データストリームを使用できます。Working C#例:Win7でのNTFS代替データストリームの書き込みと読み込み64ビット

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

この時点で、私はいくつかの作業コードを見つけたいと思います。または、「ここからここには行くことができません」と伝えてください。この場合、別の魅力的ではないオプションを使用します(たとえば、ファイル名自体に同期/参照情報をエンコードし、誰もファイル名を変更しないことを願っています)。


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

しかし、それは私がアプローチの1つ、つまり以下に言及したTrinetの1つを間違って使用していたことが判明したのではないでしょうか。問題は、代替ストリームを保存しようとしていた「ベース」ファイルをまだ作成していなかったことだと思います。私はこのライブラリを使用してWindows 7のx64上で成功を収めてきた

+0

http://stackoverflow.com/q/604960/102937 –

+0

あなたがしようとしたアプローチのいくつかにあなたの質問へのリンクに記載してください、そしてなぜ彼らは失敗しました。さもなければ、私達はあなたに同じ失敗したアプローチを紹介するつもりです。 –

答えて

5

は、ここで私が試したコードベースへのリンクです

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

私の古いコードを見つけることができず、私がブックマークしたドキュメントページは現時点ではダウンしています。問題が残っている場合は、バックアップ時にコードを投稿しようとします。

編集:あなたはまた、わずか数行のコードでNTFS代替データストリームを読み書き、リストをサポートしている私のPlatform.VirtualFileSystemライブラリを試すことができます

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の例が書かれて以来、ライブラリが変更されているように見えるので、間違ったアプローチを採用しました。また、 "ベース"ファイルを作成する前に代替ストリームを作成していましたが、問題がある可能性があります。いずれにしても、今すぐ動作します! –

+0

私はちょうどそのビットが読んだ方法を気づいた:)私が助けることができてうれしい。 – TheEvilPenguin

関連する問題