这对您来说是一个挑战 - .NET C#4.0或更低版本。
我有一个基本的C#应用程序,它在表单上有一个按钮。
该按钮使用API,该API将文件路径作为音频文件位置的参数。 然后API允许调用文件,例如someoneElsesAPI.Play(“C:\ myfile.vox”)播放文件。
我无法控制API。我必须使用API - 没有选择。
问题是,音频文件(.vox)存储在数据库中(作为blob)。 如何为API提供文件名但是提供从数据库流式传输以播放文件的内容?
例如,在ASP.NET中,可以使用处理程序或aspx页面动态显示图像,并将响应输出为图像。我想对C#桌面应用程序中的音频文件执行相同的操作。
音频文件的类型无关紧要 - 我需要知道如何通过不存在的文件路径调用文件(但在数据库中以blob形式存在)。
嘿嘿,我不要求太多吗?Mucho谢谢。
祝你好运!
丹
答案 0 :(得分:3)
我认为不能以任何合理的方式完成。相反,你可以轻松获取blob。将其保存到临时文件,并将临时文件的路径提供给API。它不会提供任何类型的流,但正如您可能想象的那样,覆盖.net处理文件系统的方式并不容易实现。你为什么这样?如果这对您来说是一个真正的问题,我建议您将使用的API更改为支持您尝试实现的目标的API,而不是寻找 hacky 解决方案。< / p>
答案 1 :(得分:3)
从数据库中读取blob,将文件存储到临时文件中,然后将临时文件名传递给api
答案 2 :(得分: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”不起作用。