Извлечь и открыть PPT из ресурсов в C # - PullRequest
0 голосов
/ 20 февраля 2012

Я хочу просмотреть презентацию в PowerPoint Viewer, файл ppt находится в ресурсах.поэтому проблема в том, как мне получить к нему доступ и просмотреть в PowerPoint Viewer.

Вот пример кода

Process.Start(@"C:\Program Files\Microsoft Office\Office12\PPTVIEW.exe",**@"e:\presentation.ppt")**;

Как заменить этот путь на ppt, содержащийся в ресурсах?

1 Ответ

3 голосов
/ 20 февраля 2012

На самом деле, то, что вы просите, является общей схемой, и здесь есть несколько связанных вопросов и ответов на SO.

В основном то, что вы делаете в общем, следующее:

  1. найдите соответствующий ресурс и откройте для него поток ресурсов.
  2. Сохраните поток во (временный) файл, если ваш целевой API не может напрямую обрабатывать потоки или байтовые массивы.
  3. Выполните любую операцию над файлом или непосредственно над массивом потоков / байтов (как я уже сказал, если поддерживается).
  4. В конечном итоге удалить временный файл, если он есть, из шага 1.

Итак, вы сначала извлекаете PPT-файл (на самом деле не имеет значения, является ли он PPT-файлом, может быть любым файлом или байтовым блобом)

string tempFile = Path.GetTempFileName();

using (Stream input = assembly.GetManifestResourceStream("MyPresentation.PPT"))
using (Stream output = File.Create(tempFile))
{
   input.CopyTo(output); // Stream.CopyTo() is new in .NET 4.0, used for simplicity and illustration purposes.
}

Затем вы открываете его, используя Process.Start(). Вам не нужно указывать путь к исполняемому файлу Powerpoint, так как PPT должен быть зарегистрированным расширением файла в PowerPoint или PowerPoint Viewer. Если вы оба установили, вы все равно можете указать путь к соответствующему исполняемому файлу, чтобы предотвратить запуск неправильного приложения. Убедитесь, что вы не указали путь жестко, но попытайтесь извлечь его из реестра (или что-то подобное, я не проверял, потому что сейчас он слишком конкретен).

using (var process = Process.Start(tempFile))
{
   process.WaitForExit();
   // remove temporary file after use
   File.Delete(tempFile);
}

Примечание: я упустил довольно много обработки ошибок, которую вы, возможно, захотите добавить в реальное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...