Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在剪贴板中存储带有图像的HTML而不泄漏临时文件?_C#_.net_Windows_Clipboard - Fatal编程技术网

C# 如何在剪贴板中存储带有图像的HTML而不泄漏临时文件?

C# 如何在剪贴板中存储带有图像的HTML而不泄漏临时文件?,c#,.net,windows,clipboard,C#,.net,Windows,Clipboard,有没有办法将HTML片段存储在包含引用临时图像文件的元素的Windows剪贴板中,并确保临时图像文件不留在临时目录中 下面是一些示例代码,用于说明我遇到的问题: 在我的测试应用程序中按下按钮执行以下代码: WriteHtmlToClipboard()将HTML片段写入剪贴板: private static void CreateImage(string tempFileName) { Bitmap b = new Bitmap(50, 50); using (Graphics g

有没有办法将HTML片段存储在包含引用临时图像文件的
元素的Windows剪贴板中,并确保临时图像文件不留在临时目录中

下面是一些示例代码,用于说明我遇到的问题:

在我的测试应用程序中按下按钮执行以下代码:

WriteHtmlToClipboard()
将HTML片段写入剪贴板:

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);
    }
}
private static void WriteHtmlToClipboard(字符串html)
{
const string prefix=“head>HTML剪贴板”;
常量字符串后缀=”;
const string header=“版本:0.9\r\n”+
“StartHTML:AAAAA\r\n”+
“EndHTML:BBBBBB\r\n”+
“StartFragment:CCCC\r\n”+
“EndFragment:DDDDDD\r\n”;
字符串结果=标题+前缀+html+后缀;
结果=结果.Replace(“AAAAAA”,header.Length.ToString(“D6”))
.替换(“BBBBBB”,结果.长度.ToString(“D6”))
.替换(“CCCC”,(标题+前缀).Length.ToString(“D6”))
.Replace(“DDDDDD”,(标题+前缀+html).Length.ToString(“D6”);
SetText(结果,TextDataFormat.Html);
}
关于临时图像文件的处理,我现在有两种选择:

  • 在应用程序终止时删除图像文件。问题:当我将HTML文本从剪贴板粘贴到另一个应用程序中时,图像丢失。大多数用户希望即使关闭应用程序,剪贴板的内容也会保留下来

  • 即使在应用程序终止后,仍将映像文件保留在临时目录中。问题:当剪贴板的内容被其他内容替换时,谁会删除图像文件


当然,我可以实现一个助手应用程序,它可以在Windows启动和清理任何临时映像文件时运行,但我更喜欢一个更优雅的解决方案

你提出的解决方案没有任何帮助,因为一旦粘贴了剪贴板内容,你就会永远离开文件(或者直到你粘贴HTML的任何应用程序决定删除它),否则你就会把
img
标记指向一个不存在的文件。我知道这一点(实际上,这就是我上面写的)。上面的代码仅说明了它不起作用的原因。我的问题是:有没有可行的解决方案(我希望如此,因为无数的应用程序都使用带有图像的HTML作为剪贴板格式,所以一定有人已经解决了这个问题)?另见
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);
    }
}
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);
}