AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1840420
Accepted
william
william
Asked: 2024-04-26 12:49:19 +0800 CST2024-04-26 12:49:19 +0800 CST 2024-04-26 12:49:19 +0800 CST

复制文件后立即删除或移动文件是否安全?[特别是Windows]

  • 772

我知道有时在复制文件时,系统会“缓存”复制过程,或者“延迟”该过程:即,复制过程实际完成比“过程完成”UI 需要更长的时间-通知会让你相信。这就是为什么在复制到外部硬盘驱动器后立即直接删除它们并不好,而是要稍等一下再这样做。

因此,现在假设我将文件复制到同一驱动器内的另一个文件夹,或者完全复制到不同的驱动器。现在,我立即将该源文件移动到另一个文件夹,或者删除它(将其移动到垃圾箱);就文件损坏而言,这样做会危及源文件或其新制作的副本吗?或者更确切地说,计算机是否有一个适当的系统来防止这种可能性,通过在复制完全完成之前自动防止源文件的任何实际移动或删除?

windows-11
  • 3 3 个回答
  • 531 Views

3 个回答

  • Voted
  1. Best Answer
    Thorsten Schöning
    2024-04-26T14:31:07+08:002024-04-26T14:31:07+08:00

    因此,现在假设我将文件复制到同一驱动器内的另一个文件夹,或者完全复制到不同的驱动器。

    这是一个相当重要的区别,因为不同的驱动器意味着不同的文件系统,很可能具有不同的存储语义、缓存行为等。因此,让我们让事情变得更简单,并保留在同一个文件系统中。

    或者更确切地说,计算机是否有一个适当的系统来防止这种可能性,通过在复制完全完成之前自动防止源文件的任何实际移动或删除?

    由于您的重点是 Windows,所以答案是肯定的。Windows 实现了一种方法,即应用程序在默认情况下对文件执行某些操作时独占锁定这些文件,以便其他应用程序无法访问它。对文件执行某些操作的第一个应用程序需要决定允许其他应用程序执行哪些操作、读取、写入、删除等。如果没有明确的决定,其他应用程序将无法执行任何操作,包括在复制过程中移动文件。请记住,复制过程是一个应用程序,试图同时将文件移动到另一个应用程序等。有关详细信息,请查看CreateFileW及其参数dwShareMode。

    因此,虽然有某种程度的可用安全网,但这很可能是不需要的:无论如何,文件系统缓存(大部分)是由操作系统和文件系统透明处理的。总体目标是用户和应用程序不需要处理细节,其中包括复制和了解数据何时真正复制以进行进一步操作之类的事情。应用程序可能对此类细节感兴趣,例如可能使用刷新命令,这些命令告诉操作系统或文件系统它们现在将缓存写入某些文件的数据,并且调用应用程序等待直到完成。但在大多数情况下这是没有必要的。

    这包括复制后移动:如果仅涉及文件系统缓存,而不涉及文件系统缓存,例如文件仍被复制过程本身锁定(例如 Windows 资源管理器),则即使尚未将所有数据写入磁盘,您也可以自由移动文件。这是因为大多数文件系统并不直接将实际文件数据与其文件名或路径相关联,而是独立处理两者。因此,数据存储在某个位置,在不同的位置存储文件名,引用其父路径并引用数据。因此,当文件名本身更改或移动到其他目录时,它只是保留对实际数据的引用,操作系统和文件系统可以同时继续将其缓存刷新到它们已经关联的位置文件名。

    https://en.wikipedia.org/wiki/Inode

    现代文件系统甚至不需要关心或事先知道需要写入多少数据,它们只是按照一定的规则在某处分配数据块,并将每个分配的块与已经存在的填充名称对象相关联。

    https://en.wikipedia.org/wiki/Extent_(file_systems)

    • 2
  2. u1686_grawity
    2024-04-26T15:10:34+08:002024-04-26T15:10:34+08:00

    就文件损坏而言,这样做会危及源文件或其新制作的副本吗?或者更确切地说,计算机是否有一个适当的系统来防止这种可能性,通过在复制完全完成之前自动防止源文件的任何实际移动或删除?

    以上都不是。此时文件复制过程不依赖于原始文件;它已经读取了所有原始文件并将所有数据“写入”到新文件中,因此“处理完成”UI 通知有点告诉您真相。

    实际上被缓存(缓冲)的只是那些写操作——有一个完全独立的缓存层,与复制无关,而是与一般写入磁盘有关。任何文件写入,无论是从一个文件复制到另一个文件还是只是保存文档,都会首先由操作系统缓冲在内存中,然后才刷新到物理存储。(也就是说,就程序所见而言,数据已经“在”文件中,只是还没有在磁盘上的文件中。)

    • 1
  3. harrymc
    2024-04-26T19:01:44+08:002024-04-26T19:01:44+08:00

    在同一文件系统(分区)内或不同文件系统之间移动之间存在细微差别。

    对于在同一文件系统内移动:磁盘上的文件数据与其文件表内的元数据完全分开。元数据包括指向数据的指针,但与数据无关,因为可以将文件条目移动到另一个文件夹而不移动数据。

    在您的情况下,可能发生的情况是文件的数据尚未终止移动并且仍在缓存内,而文件条目已移动到同一文件系统中的其他位置。不会遇到任何问题,并且文件的数据将继续从缓存中刷新,而文件已经位于其新文件夹中(包括当这是回收站时)。

    对于在不同文件系统内移动:Windows 将尝试将文件的数据复制到新磁盘,然后创建并输入新的文件表,最后删除源磁盘上的文件。

    复制数据时,每个源块将依次被读取和复制。如果源数据尚未写入源磁盘中的位置,则可以从内存缓存中读取源数据,然后将其复制到新磁盘。例如,很可能会发现相同的数据在缓存中重复两次,其中每个副本都注定要写入不同的磁盘。

    当 Windows 的复制操作完成时,即使没有将所有块都写入两个磁盘,源文件也会被删除。这将使内存缓存中的所有块无效,从而简单地取消源文件中未写入的块。在这种情况下,可能会发生这样的情况:立即删除或移动文件最终在磁盘上比等待写入终止后再执行操作更有效。

    对于复制后立即删除:如上所述,这将取消内存缓存中仍存在的所有未写入块,因此此类块永远不会写入磁盘。

    • 1

相关问题

  • 在 Windows 11 上的 Windows 终端中加载用户设置时遇到错误

  • 基于 USB 的外部 TPM?

  • 为什么我的硬件不支持 Windows 11?

  • 如果我在正在运行/已安装的 Windows 操作系统上启用 TPM,会发生什么情况?

  • M1 Macbook Pro 可以运行 Windows 11 的 ARM 版本并编译 Visual Studio .Net 4+ 项目吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve