Интересно, почему я теряю данные буфера обмена при копировании файла. После выбора строки текста и копирования ее в буфер обмена эти скопированные текстовые данные каким-то образом теряются, если я выбираю файл и копирую его в проводнике Windows перед тем, как вставить текст куда-то.
Например, я выделяю и копирую эту строку текста:
Черная собака бежит ночью
Затем я захожу в проводник Windows, чтобы выбрать и скопировать файл:
безымянный.bat
После этого я вставляю копию файла untitled.bat
. Если я затем перейду куда-нибудь, где я могу вставить текст (например, в Блокнот), изначально скопированная строка текста больше не будет в буфере обмена для вставки.
Почему Windows это делает?
Работает на Windows10 Pro
решение1
Вы не "теряете" данные буфера обмена. Они просто перезаписываются новыми данными ипо умолчаниювы не можете получить доступ к старым данным, поскольку они хранятся как одна запись в оперативной памяти. Однако есть и лучшие способы отслеживать их, один из которых будет перечислен ниже.
Это потому, что система не может полностью знать, что именно вы хотите вставить, и для этого есть только один ярлык Ctrl+ V. Приложения могут быть закодированы для проверки определенных форматов и правильной обработки всех из них, если это необходимо. Так что пользователю решать, что будет последним пунктом. И приложение должно уведомить пользователя, поддерживается ли текущий формат, к сожалению, многие из них просто ничего не делают, если происходит вставка неподдерживаемого формата.
Хорошим примером являются текстовые поля вопросов/ответов на этом сайте. Вы можете указать текст ( CF_TEXT
/ CF_UNICODETEXT
type) в качестве последнего элемента, и он будет вставлен как текст. Вы также можете указать изображение в качестве последнего элемента ( CF_DIB
type), и он загрузит изображение. Или вы можете скопировать файл из проводника Windows ( CF_HDROP
type), и вставка ничего не даст, так как обычная загрузка файлов, не являющихся изображениями, здесь не приветствуется.
Для сравнения, если вы составляете письмо, скажем, в 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чтобы создать копию, перемещайте мышь, пока не увидите значок копии, обозначенный
[+]
, затем отпустите кнопку мыши. - используйте сторонние инструменты, такие какБыстрое копированиедля копирования файлов.