Как хранить HTML с изображениями в буфере обмена без утечки временных файлов? - PullRequest
1 голос
/ 14 марта 2012

Есть ли способ сохранить фрагменты HTML в буфере обмена Windows, содержащие элементы <img...>, которые ссылаются на временные файлы изображений, и убедиться, что в каталоге TEMP не осталось временных файлов изображений?

Вот некоторыеПример кода для иллюстрации проблемы, с которой я сталкиваюсь:

При нажатии кнопки в моем тестовом приложении выполняется следующий код:

string tempFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) + ".png";
CreateImage(tempFileName);
string html = string.Format("<p>[This is <b>HTML</b> with a picture:<img src=\"file://{0}\">]</p>", tempFileName);
WriteHtmlToClipboard(html);
MessageBox.Show("Wrote HTML to clipboard");

CreateImage() отображает и сохраняет файл изображения на летувот так:

private static void CreateImage(string tempFileName)
{
    Bitmap b = new Bitmap(50, 50);
    using (Graphics g = Graphics.FromImage(b))
    {
        g.DrawEllipse(Pens.Red, new RectangleF(2, 2, b.Width - 4, b.Height - 4));
        Bitmap b2 = new Bitmap(b);
        b2.Save(tempFileName, ImageFormat.Png);
    }
}

WriteHtmlToClipboard() записывает фрагмент HTML в буфер обмена:

private static void WriteHtmlToClipboard(string html)
{
    const string prefix = "<html>head><title>HTML clipboard</title></head><body>";
    const string suffix = "</body>";
    const string header = "Version:0.9\r\n" +
                            "StartHTML:AAAAAA\r\n" +
                            "EndHTML:BBBBBB\r\n" +
                            "StartFragment:CCCCCC\r\n" +
                            "EndFragment:DDDDDD\r\n";
    string result = header + prefix + html + suffix;
    result = result.Replace("AAAAAA", header.Length.ToString("D6"))
        .Replace("BBBBBB", result.Length.ToString("D6"))
        .Replace("CCCCCC", (header + prefix).Length.ToString("D6"))
        .Replace("DDDDDD", (header + prefix + html).Length.ToString("D6"));

    Clipboard.SetText(result, TextDataFormat.Html);
}

Теперь у меня есть две альтернативы, касающиеся обработки временного файла изображения:

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

  • Оставьте файл изображения в каталоге TEMP даже после завершения работы приложения. Проблема: Кто удаляет файл изображения, когда содержимое буфера обмена заменяется чем-то другим?

Конечно, я мог бы реализовать вспомогательное приложение, которое запускается при загрузке Windows иочищает любой временный файл изображения, но я бы предпочел более элегантное решение.

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