Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过数据库模拟C文件路径_C#_.net_Database_Streaming_Filepath - Fatal编程技术网

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

C# 通过数据库模拟C文件路径,c#,.net,database,streaming,filepath,C#,.net,Database,Streaming,Filepath,这是一个挑战-.NETC4.0或更低版本 我有一个基本的C应用程序,它在表单上有一个按钮 该按钮使用一个API,该API将文件路径作为音频文件位置的参数。 然后,API允许调用文件,例如someonesesapi.PlayC:\myfile.vox来播放该文件 我无法控制API。我必须使用API——别无选择 问题是,音频文件.vox作为blob存储在数据库中。 如何向API提供文件名,同时提供从数据库流式传输的内容以播放该文件 例如,在ASP.NET中,可以使用处理程序或aspx页面动态显示图像

这是一个挑战-.NETC4.0或更低版本

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

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

我无法控制API。我必须使用API——别无选择

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

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

音频文件的类型是不相关的-我需要知道如何通过一个文件路径调用一个文件,该文件路径不存在,但在数据库中确实以blob的形式存在

呵呵,我要求不多,是吗

谢谢

祝你在这次挑战中好运


丹。

我认为这是不可能以任何合理的方式做到的。相反,你可以很容易地找到斑点。将其保存到临时文件中,并将临时文件的路径提供给API。它不会提供任何类型的流,但正如您可能想象的那样,覆盖.net处理文件系统的方式并不是一件容易做到的事情。你为什么要这么做?如果这对您来说是一个真正的问题,我建议您将使用的API更改为另一个支持您尝试实现的API,而不是寻找黑客解决方案。

我认为这是不合理的。相反,你可以很容易地找到斑点。将其保存到临时文件中,并将临时文件的路径提供给API。它不会提供任何类型的流,但正如您可能想象的那样,覆盖.net处理文件系统的方式并不是一件容易做到的事情。你为什么要这么做?如果这对您来说是一个真正的问题,我建议您将使用的API更改为另一个支持您尝试实现的API,而不是寻找黑客解决方案。

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

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

根据api打开文件的方式,您可能可以将命名管道用作虚拟文件

这个命令行示例创建一个名为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!");
                }
            }
        }
    }
}
现在,您可以在命令提示符下运行\\.\pipe\hello.txt类型,查看某些应用程序如何将管道当作文件来读取。文件名始终为\\.\pipe\后跟管道名


但这并不适用于所有应用程序或API。例如,sort.exe\\.\pipe\hello.txt可以工作,但more.exe\\.\pipe\hello.txt不能工作。

根据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!");
                }
            }
        }
    }
}
现在,您可以在命令提示符下运行\\.\pipe\hello.txt类型,查看某些应用程序如何将管道当作文件来读取。文件名始终为\\.\pipe\后跟管道名


但这并不适用于所有应用程序或API。例如sort.exe\\.\pipe\hello.txt可以工作,但more.exe\\.\pipe\hello.txt不能工作。

您的第一个错误是将二进制数据存储在数据库中。我认为将二进制数据存储在数据库中没有任何错误。不是说DB永远是一条路要走,但它绝对是大量用例的有效解决方案。没有好的干净的解决方案来解决这个问题。在数据库中存储音频文件只是一个糟糕的设计。你真的应该重新考虑一下,我不同意莱皮的观点。也许这不是他的选择,或者他别无选择。@纪尧姆:不,不是。数据库并不是用来保存这种数据的。大多数时候都是糟糕的设计,人们只是把文件塞进数据库,因为这是技术上可能的。你的第一个错误是在数据库中存储二进制数据。我看不出在数据库中存储二进制数据有什么错。不是说DB永远是一条路要走,但它绝对是大量用例的有效解决方案。没有好的干净的解决方案来解决这个问题。在数据库中存储音频文件只是一个糟糕的设计。你真的应该重新考虑一下,我不同意莱皮的观点。也许这不是他的选择,或者他别无选择。@纪尧姆:不,不是。数据库并不是用来保存这种数据的。大多数时候都是糟糕的设计,人们只是把文件塞进数据库,因为这是技术上的可能。我已经将文件存储为临时文件,因为这是API公开的内容。但是我不想保存文件,这就是我为什么要保存的原因
另外,正如我在问题中所说的,我不能更改API。我别无选择,只能使用API-因此我正在扩展.NET以充分利用我的现有资源。我已经将这些文件存储为临时文件,因为API公开了这些文件。但是我不想保存这个文件——这就是我为什么要问的原因。另外,正如我在问题中所说的——我不能更改API。我别无选择,只能使用API,所以我正在扩展.NET以充分利用我所拥有的。这是我已经做的,因为目前,这是我唯一的选择。这是我已经做的,因为目前,这是我唯一的选择。