私はこのhttp://www.codeproject.com/Articles/31944/Implementing-a-TextReader-to-extract-various-filesを使用しており、ほとんど機能しています。
このテストを作成して、フィルターがバイト配列から期待どおりに読み取られるかどうかを確認しました。
private const string ExpectedText = "This is a test!";
[Test]
public void FilterReader_RtfBytes_TextMatch()
{
var bytes = File.ReadAllBytes(@"Test Documents\DocTest.rtf");
var reader = new FilterReader(bytes, ".rtf");
reader.Init();
var actualText = reader.ReadToEnd();
StringAssert.Contains(ExpectedText, actualText);
}
テストはErrorCode:FILTER_E_ACCESSで失敗します。ファイル名を指定すると、正常に機能します。
new FilterReader(@"Test Documents\DocTest.rtf", ".rtf"); <-- works
それがなぜなのか私は戸惑っています。コードを調べたところ、エラーを返すのはrtffilterdllのようです。これはさらに不可解です。
次のような他のファイルタイプでも正常に機能します。.doc、.docx、.pdf