Почему я теряю данные буфера обмена после копирования файла?

Почему я теряю данные буфера обмена после копирования файла?

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

Например, я выделяю и копирую эту строку текста:

Черная собака бежит ночью

Затем я захожу в проводник Windows, чтобы выбрать и скопировать файл:

безымянный.bat

После этого я вставляю копию файла untitled.bat. Если я затем перейду куда-нибудь, где я могу вставить текст (например, в Блокнот), изначально скопированная строка текста больше не будет в буфере обмена для вставки.

Почему Windows это делает?

Работает на Windows10 Pro

решение1

Вы не "теряете" данные буфера обмена. Они просто перезаписываются новыми данными ипо умолчаниювы не можете получить доступ к старым данным, поскольку они хранятся как одна запись в оперативной памяти. Однако есть и лучшие способы отслеживать их, один из которых будет перечислен ниже.

Это потому, что система не может полностью знать, что именно вы хотите вставить, и для этого есть только один ярлык Ctrl+ V. Приложения могут быть закодированы для проверки определенных форматов и правильной обработки всех из них, если это необходимо. Так что пользователю решать, что будет последним пунктом. И приложение должно уведомить пользователя, поддерживается ли текущий формат, к сожалению, многие из них просто ничего не делают, если происходит вставка неподдерживаемого формата.

Хорошим примером являются текстовые поля вопросов/ответов на этом сайте. Вы можете указать текст ( CF_TEXT/ CF_UNICODETEXTtype) в качестве последнего элемента, и он будет вставлен как текст. Вы также можете указать изображение в качестве последнего элемента ( CF_DIBtype), и он загрузит изображение. Или вы можете скопировать файл из проводника Windows ( CF_HDROPtype), и вставка ничего не даст, так как обычная загрузка файлов, не являющихся изображениями, здесь не приветствуется.

Для сравнения, если вы составляете письмо, скажем, в Gmail, все эти типы будут поддерживаться. CF_TEXTвсе равно вставит текст. CF_DIBвсе равно вставит встроенное изображение. Однако, CF_HDROPбудет обработано лучше на этот раз и отправлено как вложение.

Подробнее о типах/форматах, доступных в Windows, можно прочитать здесь.здесь.


Вы можете использовать расширенные менеджеры буфера обмена, такие какТо же самоеЧтобы обойти это ограничение:

  • по умолчанию доступ к истории элементов намного проще - через список, который можно отображать и которым можно управлять (например, с помощью сочетания клавиш для перехода к следующему элементу) - и вы можете дополнительно настроить его при необходимости
  • вы также можете настроить 3 дополнительных специальных буфера копирования для использования с различными типами хранилищ. В Options-> Copy Buffersвы устанавливаете 3 привязки клавиш для каждого буфера (отдельный список): копировать, вставить и вырезать. Допустим, вы определяете это как традиционные сочетания клавиш + Shift. Затем вы можете скопировать все файлы в новый определенный буфер с помощью Shift+ Ctrl+ C, и ваш основной буфер обмена по-прежнему будет содержать текст. Это может быть полезно для определенных рабочих процессов.

А в Linux естьКопироватьQ.

Почему сами системы не реализуют несколько буферов? Различные причины, которые попадают в область «мнения», но факт в том, что они вносят беспорядок в виде дополнительных сочетаний клавиш/кнопок, если их использование должно быть удобным, и загромождать системы пользователей, которым эта функция не нужна, было бы нехорошо.

решение2

В буфере обмена можно хранить толькоодин элемент за раз, возможно, в одном или нескольких форматах. Например, браузер может поместить изображение bitmap, URL изображения, веб-сайт, альтернативный текст... когда вы копируете изображение с какого-либо веб-сайта, и целевое приложение выберет соответствующий формат при вставке, но это все еще всего лишь один элемент. Вы можете легко проверить текущие форматы в буфере обменас этим

Если он может хранить несколько элементов, то как ОС может знать, что вставлять, когда вы нажимаете Ctrl+ V? Это одинаково почти во всех ОС. Если вы копируете что-то другое, независимо от типа, то старый контент будет потерян. Копирование файла с помощью визуализации помещает объект, представляющий файл, а также путь к файлу в виде текста в буфер обмена, то как можно сохранить старый текст? Если поддерживается буфер обмена с несколькими элементами, то разумным поведением при нажатии Ctrl+ Vбудет вставка верхнего элемента, но если какой-то текст был помещен в буфер обмена при копировании файла, то ваш предыдущий текст уже переместился вниз по списку и не может быть вставлен


Однако в Windows есть встроенная функция истории буфера обмена, поэтому просто включите ее и нажмите Win+ V. Ее даже можно синхронизировать между ПК с Windows.

Настройки буфера обмена

История буфера обмена

решение3

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

Когда вы копируете и вставляете что-либо в проводнике Windows, используется буфер обмена Windows, но вместо того, чтобы фактически перемещать/копировать весь файл в буфер обмена, он просто сохраняет там сведения о файле, а также то, выбрал ли пользователь операцию «вырезать» (переместить файл) или «копировать» (скопировать файл). Затем, когда пользователь вставляет файл в место назначения, выполняется фактическое перемещение или копирование.

Раньше, если вы копировали что-то в другом приложении и вставляли это в проводник Windows, создавался файл «scrap», содержащий содержимое буфера обмена, но эта функция использовалась редко и была удалена в Windows Vista.

Это ставит проводник Windows в немного странное положение: он использует системный буфер обмена, но не может взаимодействовать с большинством других приложений.

решение4

Другие уже указали на технические причины, по которым это происходит. Если вы хотите сами это наблюдать, попробуйтеNirSoft InsideClipboard. Он показывает вам, что находится в буфере обмена Windows (не в истории буфера обмена Windows). Он будет содержать только один скопированный вами элемент, но этот элемент может существовать в разных форматах, например, в простом тексте HTML.

Вот как это может выглядеть для вашего текста:

Текст скопирован.

После

  • Ctrl+Cили
  • Контекстное меню файла / Копировать
  • Копия ленты

в проводнике Windows:

Файл скопирован.

Решение этой конкретной проблемы:

  • Выберите файл с помощью мыши и удерживайте его, нажмите , Ctrlчтобы создать копию, перемещайте мышь, пока не увидите значок копии, обозначенный [+], затем отпустите кнопку мыши.
  • используйте сторонние инструменты, такие какБыстрое копированиедля копирования файлов.

Связанный контент