1

.NET C# 4.0 以下の課題があります。

フォームにボタンが 1 つある基本的な C# アプリケーションがあります。

このボタンは、ファイル パスをオーディオ ファイルの場所のパラメータとして受け取る API を使用します。次に API は、ファイルを再生するために someoneElsesAPI.Play("C:\myfile.vox") などのファイルの呼び出しを許可します。

私は API を制御できません。API を使用する必要があります。選択の余地はありません。

問題は、オーディオ ファイル (.vox) がデータベースに (ブロブとして) 保存されていることです。API にファイル名を指定しながら、ファイルを再生するためにデータベースからストリーミングされるものを提供するにはどうすればよいですか?

たとえば、ASP.NET では、ハンドラーまたは aspx ページと応答出力をイメージとして使用することにより、イメージを動的に表示できます。C# デスクトップ アプリケーションでオーディオ ファイルに対して同じトリックを実行したいと考えています。

オーディオ ファイルの種類は関係ありません。存在しないファイル パスを介してファイルを呼び出す方法を知る必要があります (ただし、データベースに BLOB として存在します)。

へへへへへへへへへへへへへへ、私はあまり求めないの?

ムチョありがとう。

このチャレンジで頑張ってください!

ダン。

4

3 に答える 3

3

私はそれが合理的な方法でできるとは思いません。代わりに、ブロブを簡単にフェッチできます。それを一時ファイルに保存し、一時ファイルのパスをAPIに指定します。ストリーミングは提供されませんが、ご想像のとおり、.netがファイルシステムを処理する方法をオーバーライドすることは簡単に実行できるものではありません。そして、なぜあなたは?これが実際の問題である場合は、ハッキーなソリューションを探すのではなく、使用しているAPIを、達成しようとしていることをサポートする別のAPIに変更することをお勧めします。

于 2010-11-04T12:27:48.083 に答える
3

データベースからblobを読み取り、ファイルを一時ファイルに保存してから、一時ファイル名をAPIに渡します。

于 2010-11-04T12:28:44.963 に答える
0

API がファイルを開く方法によっては、NamedPipe を「仮想ファイル」として使用できる場合があります。

このコマンド ラインの例では、hello.txt という名前のパイプを作成し、それに「データ」を書き込みます。

using System;
using System.IO;
using System.IO.Pipes;

namespace TestNamedPipe
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var pipe = new NamedPipeServerStream("hello.txt"))
            {
                pipe.WaitForConnection();
                using (var writer = new StreamWriter(pipe))
                {
                    writer.WriteLine("Hello, World!");
                }
            }
        }
    }
}

これで、コマンド プロンプトから "type \\.\pipe\hello.txt" を実行して、一部のアプリがパイプをファイルのように読み取る方法を確認できます。「ファイル名」は常に「\\.\pipe\」の後にパイプ名が続きます。

ただし、これはすべてのアプリまたは API で機能するわけではありません。たとえば、「sort.exe \\.\pipe\hello.txt」は機能しますが、「more.exe \\.\pipe\hello.txt」は機能しません。

于 2011-01-20T16:51:31.650 に答える