C#文件路径通过数据库模仿

时间:2010-11-04 12:23:34

标签: c# .net database streaming filepath

这对您来说是一个挑战 - .NET C#4.0或更低版本。

我有一个基本的C#应用​​程序,它在表单上有一个按钮。

该按钮使用API​​,该API将文件路径作为音频文件位置的参数。 然后API允许调用文件,例如someoneElsesAPI.Play(“C:\ myfile.vox”)播放文件。

我无法控制API。我必须使用API​​ - 没有选择。

问题是,音频文件(.vox)存储在数据库中(作为blob)。 如何为API提供文件名但是提供从数据库流式传输以播放文件的内容?

例如,在ASP.NET中,可以使用处理程序或aspx页面动态显示图像,并将响应输出为图像。我想对C#桌面应用程序中的音频文件执行相同的操作。

音频文件的类型无关紧要 - 我需要知道如何通过不存在的文件路径调用文件(但在数据库中以blob形式存在)。

嘿嘿,我不要求太多吗?

Mucho谢谢。

祝你好运!

3 个答案:

答案 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”不起作用。