繁体   English   中英

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

[英]C# file path mimic via database

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

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

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

我无法控制API。 我必须使用API​​-那里别无选择。

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

例如,在ASP.NET中,可以通过使用处理程序或aspx页面并将响应输出为图像来动态显示图像。 我想对C#桌面应用程序中的音频文件做同样的技巧。

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

嘿,我要求不高?

Mucho谢谢。

祝您在这次挑战中一切顺利!

担。

我认为这不可能以任何合理的方式完成。 相反,您可以轻松获取该blob。 将其保存到临时文件,然后将临时文件的路径提供给API。 它不会提供任何类型的流,但是您可能会想像到,覆盖.net处理文件系统的方式并不是一件容易的事情。 那你为什么呢? 如果这是你真正的问题,我会建议改变你使用一个支持你正在努力实现的,而不是寻找解决方案, 哈克什么另一个的API。

从数据库中读取Blob,将文件存储到临时文件中,然后将临时文件名传递到api中

根据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”无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM