Есть ли способ сохранить фрагменты 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 иочищает любой временный файл изображения, но я бы предпочел более элегантное решение.