[英]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.