限制剪贴板中的文本数据大小?

时间:2011-05-22 20:06:19

标签: .net windows text size clipboard

**附录:经过一段时间的研究后,我发现我正在吠叫错误的树。问题不在于剪贴板本身,但是如果你提供了格式错误的unicode文本会发生什么呢?我的编辑器处理它没有问题,但是当剪贴板得到它时,它在文本中出现错误时被截断。 读取“损坏的”文件内容将在以后在应用程序中处理字符串时产生相同的效果,因此我现在使用Encoder / DecoderExceptionFallback()功能来检测错误。 相当令人大开眼界。 **

我的winforms C#应用程序中的剪贴板有问题。我正在尝试将非常长的文本保存到剪贴板(> 140万个字符),并且当使用DataFormats.UnicodeText时,我无法获得相同数量的文本。在特定情况下,我复制1469785个字符,但只能获得502228个字符。如果我将数据标记为DataFormats.WaveAudio,然后在调用Clipboard.GetData()时强制为字符串强制转换,我实际上会返回正确的字符数。仅在使用文本时似乎有一些特殊处理。

这不起作用:

Clipboard.SetData( System.Windows.Forms.DataFormats.UnicodeText, _sb.ToString() );
StringBuilder _sb2 = new StringBuilder( Clipboard.GetData( DataFormats.UnicodeText ) );

虽然这样做:

Clipboard.SetData( System.Windows.Forms.DataFormats.WaveAudio, _sb.ToString() );
StringBuilder _sb2 = new StringBuilder( ( string )Clipboard.GetData( DataFormats.WaveAudio ) );

使用DataFormat.Text也没有帮助,但添加了unicode字符的修改(原因很明显:D)。

我可以在网上找到的所有信息都表示剪贴板大小没有可用内存的限制,那么如何解释呢?是否真的对文本数据格式进行了一些特殊处理?我确定我在这里错过了一些重要的东西,但又是什么?

1 个答案:

答案 0 :(得分:2)

没有限制,至少在使用Windows API时是这样。但是,除非您打算让其他应用程序能够粘贴此内容,否则首先使用剪贴板可能没有任何意义。