2009-12-09 1 views
0

Я пытаюсь интегрировать несколько компонентов для создания настраиваемого решения для отчетов. Одним из этих компонентов является генератор отчетов на основе шаблонов. Он читает шаблон, состоящий из файла RTF с заполнителями и выполняет подстановку. Это отлично работает и генерирует отчет RTF.Как указать физический путь на диске в файл, но доступ к ячейке памяти?

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

Все шаблоны хранятся в базе данных. Приложение читает это оттуда как поток, а затем сохраняет его в HD как RTF-файл. Я хотел бы знать, можно ли в C# «обмануть» генератор отчетов таким образом, чтобы я мог указать строку, состоящую из своего рода «виртуального» или «фиктивного» пути, а затем откроется компонент шаблон из потока памяти, поскольку это был реальный физический путь на диске.

Любая помощь будет оценена по достоинству.

Спасибо заранее,

Гонсало

ответ

1

В C# 4 вы можете использовать файлы, отображенные на память: http://weblogs.asp.net/gunnarpeipman/archive/2009/06/21/net-framework-4-0-using-memory-mapped-files.aspx

+0

MMF позволяет получить доступ к файлу через интерфейс памяти. Ему нужно обратное: доступ к памяти через интерфейс файла. – atzz

+0

Ok Manu, это хорошая подсказка, но я использую C# 3.5 прямо сейчас. Если я перейду на C# 4 в будущем, я рассмотрю эту альтернативу. –

2

В зависимости от того, как работает генератор отчетов, вы можете быть в состоянии использовать именованный канал. См. this MSDN page для получения дополнительной информации, но основным является то, что вы должны позвонить CreateNamedPipe и указать имя, которое хотите использовать (в формате, указанном на этой странице MSDN), а затем передать это имя в качестве имени файла для вашего решения для отчетов.

+0

Ok Adam, Большое спасибо. Я проведу некоторое исследование о NamedPipes. С наилучшими пожеланиями, Gonzalo –

0

Если библиотека RTF поддерживает загрузку RTF файлы из Интернета с помощью WebRequest, вы могли бы назвать WebRequest.RegisterPrefix, чтобы сделать его назвать свой собственный WebRequest класс для конкретных Uri с. Если он использует только WebRequest для путей, которые начинаются с http, вы можете зарегистрировать префикс http://MyNonExistantDomain.internal/.

+0

Hello SLaks, К сожалению, он не поддерживает веб-запросы. С уважением, Gonzalo –