Имитация пути к файлу C # через базу данных - PullRequest
1 голос
/ 04 ноября 2010

Вот вам вызов - .NET C # 4.0 или ниже.

У меня есть базовое приложение C #, в котором на форме есть одна кнопка.

Кнопка использует API, которыйпринимает путь к файлу в качестве параметра для местоположения аудиофайла.Затем API позволяет вызывать файл, например, кто-то ElsesAPI.Play ("C: \ myfile.vox"), чтобы воспроизвести файл.

У меня нет контроля над API.Я должен использовать API - там нет выбора.

Проблема в том, что аудиофайл (.vox) хранится в базе данных (в виде большого двоичного объекта).Как указать имя файла для API, но при этом предоставить что-то, что передается из базы данных для воспроизведения файла?

Например, в ASP.NET можно динамически отображать изображение с помощьюстраница обработчика или aspx и вывод ответа в виде изображения.Я хочу сделать тот же трюк для аудио файла в настольном приложении C #.

Тип аудиофайла не имеет значения - мне нужно знать, как вызвать файл по пути к файлу, который не существует (но существует в виде большого двоичного объекта в базе данных).

хе-хе, я не прошу многого, не так ли?

Большое спасибо.

Удачи в этом испытании!

Дан.

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

Чтение большого двоичного объекта из базы данных, сохранение файла во временном файле, а затем передача имени временного файла в API

.
3 голосов
/ 04 ноября 2010

Не думаю, что это можно сделать любым разумным способом. Вместо этого вы можете легко получить блоб. Сохраните его во временный файл и укажите путь к временному файлу для API. Это не обеспечит никакой потоковой передачи, но, как вы, вероятно, можете себе представить, переопределение способа, которым .net обрабатывает файловую систему, не может быть легко осуществимо. И с чего бы ты? Если для вас это реальная проблема, я бы рекомендовал заменить используемый вами API на другой, поддерживающий то, что вы пытаетесь достичь, вместо того, чтобы искать хакерские решения.

0 голосов
/ 20 января 2011

В зависимости от того, как API открывает файлы, вы можете использовать NamedPipe в качестве «виртуального файла».

Этот пример командной строки создает именованный канал с именем hello.txt и записывает некоторые данные"to it.

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» - нет.

...