所以,我多次想知道,除了Copy-Paste-Delete之外,在Windows中使用“Cut”命令时实际的低级差异是什么,重点是“删除”部分。
然而,到目前为止它并不重要,但是在我的应用程序中使用Cut-Paste时,我遇到了一些问题,当时在进程中出错。正在被剪切粘贴的文件不再存在,并且无法通过任何数据恢复软件恢复。
所以我进行了一些测试,似乎这是真的。
有人知道Cut-Paste commant是如何工作的吗?
答案 0 :(得分:5)
Windows管理一个名为The Clipboard
的内部对象,并提供一个接口,用于将数据放入剪贴板,从剪贴板获取数据,获取有关剪贴板内容的元信息(检查它是否为空或是否存在那里的任何数据,得到数据的类型aso)。剪贴板(get,put)的操作具有复制语义。它们不会破坏源数据。当前保存在剪贴板中的对象可以随时从那里获取,在第一个" get"之后不会被删除。操作
剪贴板可以随时存储单个对象。当应用程序将某些内容放入剪贴板时,剪贴板的先前内容将丢失。剪贴板可以以多种格式存储相同的数据;应用程序负责将其置于多种格式,查询可用格式并以所需格式获取数据。例如,HTML编辑器可以在剪贴板中放置所选文本的HTML源代码和在浏览器中呈现的文本(具有不同的颜色和字体等)。然后,相同的应用程序或其他应用程序要么根据上下文获得所需的格式,要么提供" Paste Special"命令用户询问使用何种格式(例如,请参阅Microsoft Office程序或OpenOffice程序)。
剪贴板可用于(通过Windows提供的操作)所有想要使用它的应用程序,它是在应用程序之间传输数据的强大方法。但是,由于不同应用程序使用不同的格式,并不总是可以从应用程序获取数据并将其放入另一个应用程序中。例如,像记事本这样的纯文本编辑器不能Paste
以前由Paint,Photoshop或其他图形编辑器放入剪贴板的图像。这是因为记事本不知道如何处理除纯文本之外的任何内容。
Cut
,Copy
和Paste
语义每个应用程序如何使用剪贴板。实施剪切,复制和粘贴操作通常意味着:
Cut
- 应用程序将(副本)放入剪贴板中的文档中选择的对象,然后将其从文档中删除; Copy
- 应用程序将(副本)放入剪贴板中的文档中选择的对象(但不会将其从文档中删除); Paste
- 应用程序从剪贴板获取(复制)存储在那里的对象并放入当前文档中;根据应用程序的不同,它可以插入插入符号的位置,也可以替换当前选择,或者只是插入当前容器(文件夹或目录,在Windows资源管理器中);剪贴板的内容没有改变;随后的Paste
是可能的,它也会这样做; Cut
,Copy
和Paste
语义(例如,Windows资源管理器)Windows资源管理器和其他使用文件而不是文本或图像片段的程序使用不同的语义。与上述模型的最大区别在于,Windows资源管理器使用文件名(带完整路径),而不使用这些文件的内容。它不会读取文件,不会将文件内容放在剪贴板中。
Cut
- Windows资源管理器将文件的完整路径复制到剪贴板中;它还设置了一个内部标记,表示"其路径在剪贴板中的文件应由下一个Paste
" 移动;它使用此标志能够在其所有窗口中呈现变暗的 cut 文件,直到操作完成或中止为止;此时它不会移动或删除文件; Copy
- Windows资源管理器将文件的完整路径复制到剪贴板中;它不会触及文件本身;然后它清除在上一次Cut
操作中设置的标志;现在使用与其他文件相同的样式再次呈现以前 cut (如果有)的文件(没有暗淡,没有任何东西);换句话说,Copy
取消之前的任何Cut
; Paste
- Windows资源管理器从剪贴板获取文件路径;它将该路径指向的文件复制到当前目录中;它之后的作用取决于Cut
操作的内部标志;如果设置了该标志,那么该文件之前是 cut (请参阅上面的Cut
和Copy
),然后它将从原始位置和标志中删除该文件;否则(因为上一次操作是Cut
而没有设置Copy
标志),它不会以任何方式影响原始文件。请注意,Windows资源管理器不会将文件内容放入剪贴板中,这一点非常重要。如果您在资源管理器中使用Cut
或Copy
命令,那么您将删除该文件,它将无法在另一个目录中Paste
,因为该文件不再存在而且它无法复制不存在的对象。
此外,Windows资源管理器中Cut
的文件在不同目录中不能Paste
多次,因为资源管理器将Cut
与第一个Paste
配对(如果有的话)在此期间没有Copy
并且从它们产生移动操作。删除Paste
Cut
标志后,即使没有删除,也无法再次移动文件,因为它不再存在于剪贴板中存储的路径上。
我现在不在Windows上(过去3年我没有使用过Windows)但据我记忆,你可以Copy
一次文件Paste
好几次; Copy
后跟Paste
会生成该文件的副本,只要源仍然存在,后续Paste
操作就可以生成更多副本。
当然,在最不方便的时刻发生的错误会导致数据丢失。由于Windows资源管理器处理文件的方式以及可能发生的错误,因此在Cut
- Paste
操作期间将文件意外删除而不将其放入目标文件夹中的可能性非常小。
我绝对相信,由于人为错误而导致的文件丢失的数量超过了Windows资源管理器执行期间发生的错误。
其他应用程序以不同方式工作。 处理内容(文本,图片,声音,视频等)的大多数的工作方式与内容部分相同。 处理文件的大多数与Windows资源管理器的工作方式类似。
另一个应用程序可以获取放在剪贴板中的数据,但是Windows资源管理器。由应用程序将其解释为纯文本并将其从剪贴板获取的文件路径放入当前文档(记事本以这种方式工作)或识别它是文件路径并尝试复制文件(或用它做其他事情)。资源管理器的另一个窗口或实例可以做到这一点,也许其他文件管理器也会这样做。
Microsoft Office套件(Word,Excel a.s.o)中的程序以及其他一些应用程序实现了多剪贴板功能。 Windows剪贴板不提供此功能。这些应用程序像往常一样使用剪贴板,但也保留了过去放入剪贴板的对象的历史记录,并为用户提供了这些对象的列表以供重用。为了与其他应用程序的兼容性和集成,他们也从用户选择重用的对象中获取并放入剪贴板。但是,Windows剪贴板仍然包含一个对象,即任何应用程序放在那里的最后一个对象。