** ADDENDUM: После нескольких часов серьезных исследований я обнаружил, что я лаю не на том дереве.Проблема была не в самом буфере обмена, а в том, что произойдет, если вы передадите ему искаженный текст в кодировке Unicode, что я, очевидно, и сделал.У моего редактора не было проблем с обработкой, но когда буфер обмена получил его, он был обрезан в точке, где была ошибка в тексте.Чтение «поврежденного» содержимого файла будет иметь тот же эффект, когда строки обрабатываются в приложении позже, и поэтому я теперь использую функциональность Encoder / DecoderExceptionFallback () для обнаружения ошибок.Довольно сенсационное сообщение.**
У меня проблема с буфером обмена в моем приложении winforms C #.Я пытаюсь сохранить очень длинный текст в буфер обмена (> 1,4 миллиона символов), и при использовании 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тоже не помогло, но добавил искажение символов юникода (по понятным причинам: D).
Вся информация, которую я могу найти в сети, говорит, что нет ограничений на размер буфера обмена за исключением доступной памяти, так какэто можно объяснить?Есть ли какая-то особая обработка с форматом текстовых данных?Я уверен, что мне здесь не хватает какой-то жестокой вещи, но что?